Text-MultiMarkdown-1.000034/0000755000076500000240000000000011555510012014036 5ustar t0mstaffText-MultiMarkdown-1.000034/Changes0000644000076500000240000002574011555507773015365 0ustar t0mstaffThis file documents the revision history for Perl extension Text::MultiMarkdown. 1.0.34 2011-04-26T10:25:00 - Add definition list support from the MultiMarkdown spec. 1.0.33 2010-03-20T23:08:00 - Fix installation of MultiMarkdown.pl script. 1.0.32 2010-12-19T10:31:00 - Removed File::Slurp dependency (v. 9999.13 fails tests on Strawberry 5.10.1) (dandv) 1.0.31 2009-10-25T19:19:30 - Version bump to depend on 2 part version number in latest Text::Markdown to avoid dependency issues. 1.0.30 2009-10-22T22:04:40 - Add support for XHTML Headers: metadata 1.0.29 2009-10-06T08:25:40 - Update dependency versions in Makefile.PL (neglected in last release). 1.0.28 2009-10-05T20:24:40 - Changes to conform with the latest Text::Markdown version 1.0.26 API. - Update README file and tie it to the code. 1.0.27 2009-08-27T00:49:50 - Change bug tracker metadata to the github issue tracker. - Fix http://github.com/bobtfish/text-multimarkdown/issues#issue/5 regression causing specialchars to not be unhashed in footnotes. 1.0.26 2009-07-01T08:35:00 - Fix to depend on the Text::Markdown package. 1.0.25 2009-06-09T22:52:13 - Split Text::MultiMarkdown back out into it's own dist. 1.0.24 2008-11-16T14:33:30 - Add trust_list_start_value patch from Ricardo Signes (RT#40814) to enable
  • output for list numbering. This feature is disabled by default. 1.0.23 2008-11-02T18:24:30 - Ship a release with the correct contents so that the tests pass. 1.0.22 2008-10-23T18:24:44 - RT#37909 - Fix + in email addresses. - RT#40303 - Fix use in Mason by adding "use re 'eval'" to both files. - Add SVN repository to Makefile.PL - Remove META.yml from source control so it is regenerated automatically. 1.0.21 2008-07-24T08:33:00 - Fix hard tabs in Changelog - Add unit test for core dumps issue from RT#36203 - Fix POD spelling. - Fix warning from RT#34856. - Add test for another tab width issue (related to
    generation) from RT#37769. Fix this issue. - More test additions and more splitting the test suites into MDTest modules. 1.0.20 2008-07-11T23:30:00 - Update README.txt - Allow scripts to be used on multiple input files at once (processing in command line order) - Update footnote behavior of Text::MutliMarkdown to be consistent with the latest version of MultiMarkdown - Added tests for the new footnote functionality. - Added tests for all the MDTest corner cases brought up on the list. Noted why / how I differ from original Markdown. - Moved all the document tests to MDTest format. I have made MDTest test suites for Text::Markdown and Text::MultiMarkdown, containing **only** the bug fixes and behavior changes I've made, I've imported the Markdown test suite from MDTest1.1, and the MultiMarkdown test suite. - RT#36537 doc patch to add POD to the scripts from Debian's Gunnar Wolf. - Mutilate the list processing somewhat to reduce the compilation of recursive regexes, and so stop perl (<5.10) crapping itself on lots of input. This isn't the full fix - really shouldn't be using recursive regexes at all. RT#37297 1.0.19 2008-04-22T18:34:00 - Remove auto_install from Makefile.PL, this is a deprecated feature and it shouldn't be being used at all. 1.0.18 2008-04-20T18:54:50 - Clean up local stuff for settings. - Do a little cleanup of intialisation (more needed) - Remove copy pasted regexes from Text::MultiMarkdown - Fix bug with line breaks in links - http://bugs.debian.org/459885, thanks to patches and test input / output provided by Adeodato Simó. (See t/37anchormultilinebugs.t) - Incorperated MDTest1.1's tests, and made most of the Text-Markdown and Text-MultiMarkdown tests in MDTest format. - Add and document an accessor for the parsed markdown URLs. - Fix html4tags option in Markdown.pl and MultiMarkdown.pl 1.0.17 2008-03-17T01:54:00 - Add Markdown.pl and MultiMarkdown.pl, which work the same way as the original Markdown.pl. These scripts *are not* installed by default, but you will be prompted to install them when you run Makefile.PL - Make _DeTab significantly quicker. Text::Balanced is still the main performance sore point however. :( - Re-organise the module code so that Text::Markdown is a standalone module which does not require Text::MultiMarkdown. Text::MultiMarkdown now inherits from Text::Markdown and adds the additional MultiMarkdown functionality. This is a *large* change to the module's internals, but is much more in the spirit of the original Markdown project (and should silence most complaints about how the code works, and possible even stop John Gruber hating my guts). If you were using Text::Markdown previously, but relying on an implicit MultiMarkdown feature, this *could be a breaking change*. Detailed description of any possible user visible changes below: - Text::Markdown will no longer supports the additional attribute specification for images and links feature, which was not in original Markdown, but were previously supported after the code merge of Text::Markdown and Text::MultiMarkdown. If you are relying on this features, it is recommended that you use Text::MultiMarkdown (configured as you prefer), as this is not a supported feature in the original Markdown. - Text::MultiMarkdown has changed the order of attributes in image tags, the id attribute is moved from the first to the last attribute (barring user supplied attributes). An example of the expected change is included below: Old output: image New output: image This is due to the code re-organisation, moving the id attribute around shouldn't affect anything that isn't relying on the attribute ordering (which is meant to be unimportant in HTML), and allows for simplification of the unified code. 1.0.16 2008-02-25T14:24:00 - Fix bugs with tab_width in constructor / as an option. - Fix bugs with tab width in pre/code blocks. 1.0.15 2008-02-23T11:13:07 - Start using ShipIt to package the distribution. 1.0.14 2008-02-21T22:41:33 - Fix a bug in the packaging of the last version. - Add links to other implementations and some notes about them. - Add a (failing) unit test for some unexpected behavior reported on the list. 1.0.13 2008-02-19T23:54:33 - Due to the UFT8 support this module no longer works on perl < 5.8, note this in the Makefile.PL and modules. - I managed to ship a module without Makefile.PL, WTF? Really need to start using ShipIt. 1.0.12 2008-02-18T22:00:00 - Text::Markdown - borgborgborgborgborg. - Added additional POD documentation. - Cleaned up some tests, and some additional test cases. - Options to turn off all the extra features introduced in MultiMarkdown. 1.0.11 2008-01-24T00:12:00 - Fix syntax error in one of the tests. Note to self - just fixing that warning in the test case, then shipping without retesting, NOT SMART! 1.0.10 2008-01-23T15:40:00 - Fix bug with links processing in HTML blocks. 1.0.9 2008-01-22T20:28:00 - Ship non-broken dist at CPAN (oops, rushing!) 1.0.8 2008-01-22T19:20:00 - Do not encode amps or angle brackets in HTML comments + test case. - Do not emit title attribute in tags unless we have contents for it. This was a 'feature' of original Markdown where I've decided to go with what php-markdown does (tests updated). - Added php-markdown tests (most/all of the regular tests pass except the email obfu one). - Added php-markdown extra tests (all fail). - Added python markdown tests (mostly pass, but marked broken). - Add a way of stopping inline HTML blocks from suppressing markdown processing. Feature request from #catalyst-dev 1.0.7 2008-01-07T16:31:00 - Encode isn't in core in all perls, add it to Makefile.PL 1.0.6 2008-01-06T13:36:00 - Merge latest Markdown test suite I can find, and make it all pass, pulling in code from Markdown 1.0.2b8. Things fixed: - Inline HTML - Lists - Metadata skipping by leading line breaks - 3rd form of links - Implement features to suppress id attributes in and tags to be able to act more like original Markdown - now almost ready to steal Text::Markdown (would want to turn off tables / citations and bibliography for that) - Move almost all the global variables into instance data. - Fix unicode issues from CPAN.org's RT#27482 - Remove call to srand, it's not smart to do this more than once. 1.0.5 2008-01-04T18:07:57 - Add Markdown and MultiMarkdown test suites. - Fix a big bug introduced in 1.0.4 in citations - Fix footnotes (and other small things) to match the test suite 1.0.4 2008-01-02T02:03:50 - Refactor so that the processor instance has the same set of persistent options as on the ->markdown method itself. - Change all functions to be instance methods, moved a chunk of the global data to the instance. The rest will follow shortly. - The test suite now tests a reasonable set of the Markdown and MultiMarkdown syntaxes. - All known options and metadata keys have been documented. 1.0.3 2007-11-24T20:22:00 - way to keep me accountable, CPANTESTERS! Maybe I shouldn't have Test::Pod::Coverage enabled unless it actually checks out. Added some fairly useless stubbed METHODS to POD and moved POD around a bit. 1.0.2 2007-11-24T14:00:00 - move to Module::Install and clean various things up, mostly to make CPANTS happy. 1.0.1 2006-10-20T00:00:00 - include patch from Uwe Voelker to allow setting of options in markdown(); also added a test case from Uwe. Thanks, Uwe! Also updated changelog references in POD somewhat. 1.0.0 2006-08-22T00:00:00 - first release Text-MultiMarkdown-1.000034/inc/0000755000076500000240000000000011555510012014607 5ustar t0mstaffText-MultiMarkdown-1.000034/inc/Module/0000755000076500000240000000000011555510012016034 5ustar t0mstaffText-MultiMarkdown-1.000034/inc/Module/Install/0000755000076500000240000000000011555510013017443 5ustar t0mstaffText-MultiMarkdown-1.000034/inc/Module/Install/Base.pm0000644000076500000240000000214711555507676020704 0ustar t0mstaff#line 1 package Module::Install::Base; use strict 'vars'; use vars qw{$VERSION}; BEGIN { $VERSION = '0.99'; } # Suspend handler for "redefined" warnings BEGIN { my $w = $SIG{__WARN__}; $SIG{__WARN__} = sub { $w }; } #line 42 sub new { my $class = shift; unless ( defined &{"${class}::call"} ) { *{"${class}::call"} = sub { shift->_top->call(@_) }; } unless ( defined &{"${class}::load"} ) { *{"${class}::load"} = sub { shift->_top->load(@_) }; } bless { @_ }, $class; } #line 61 sub AUTOLOAD { local $@; my $func = eval { shift->_top->autoload } or return; goto &$func; } #line 75 sub _top { $_[0]->{_top}; } #line 90 sub admin { $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new; } #line 106 sub is_admin { ! $_[0]->admin->isa('Module::Install::Base::FakeAdmin'); } sub DESTROY {} package Module::Install::Base::FakeAdmin; use vars qw{$VERSION}; BEGIN { $VERSION = $Module::Install::Base::VERSION; } my $fake; sub new { $fake ||= bless(\@_, $_[0]); } sub AUTOLOAD {} sub DESTROY {} # Restore warning handler BEGIN { $SIG{__WARN__} = $SIG{__WARN__}->(); } 1; #line 159 Text-MultiMarkdown-1.000034/inc/Module/Install/Can.pm0000644000076500000240000000333311555507677020532 0ustar t0mstaff#line 1 package Module::Install::Can; use strict; use Config (); use File::Spec (); use ExtUtils::MakeMaker (); use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '0.99'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # check if we can load some module ### Upgrade this to not have to load the module if possible sub can_use { my ($self, $mod, $ver) = @_; $mod =~ s{::|\\}{/}g; $mod .= '.pm' unless $mod =~ /\.pm$/i; my $pkg = $mod; $pkg =~ s{/}{::}g; $pkg =~ s{\.pm$}{}i; local $@; eval { require $mod; $pkg->VERSION($ver || 0); 1 }; } # check if we can run some command sub can_run { my ($self, $cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { next if $dir eq ''; my $abs = File::Spec->catfile($dir, $_[1]); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # can we locate a (the) C compiler sub can_cc { my $self = shift; my @chunks = split(/ /, $Config::Config{cc}) or return; # $Config{cc} may contain args; try to find out the program part while (@chunks) { return $self->can_run("@chunks") || (pop(@chunks), next); } return; } # Fix Cygwin bug on maybe_command(); if ( $^O eq 'cygwin' ) { require ExtUtils::MM_Cygwin; require ExtUtils::MM_Win32; if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) { *ExtUtils::MM_Cygwin::maybe_command = sub { my ($self, $file) = @_; if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) { ExtUtils::MM_Win32->maybe_command($file); } else { ExtUtils::MM_Unix->maybe_command($file); } } } } 1; __END__ #line 156 Text-MultiMarkdown-1.000034/inc/Module/Install/Fetch.pm0000644000076500000240000000462711555507677021071 0ustar t0mstaff#line 1 package Module::Install::Fetch; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '0.99'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub get_file { my ($self, %args) = @_; my ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) { $args{url} = $args{ftp_url} or (warn("LWP support unavailable!\n"), return); ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; } $|++; print "Fetching '$file' from $host... "; unless (eval { require Socket; Socket::inet_aton($host) }) { warn "'$host' resolve failed!\n"; return; } return unless $scheme eq 'ftp' or $scheme eq 'http'; require Cwd; my $dir = Cwd::getcwd(); chdir $args{local_dir} or return if exists $args{local_dir}; if (eval { require LWP::Simple; 1 }) { LWP::Simple::mirror($args{url}, $file); } elsif (eval { require Net::FTP; 1 }) { eval { # use Net::FTP to get past firewall my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600); $ftp->login("anonymous", 'anonymous@example.com'); $ftp->cwd($path); $ftp->binary; $ftp->get($file) or (warn("$!\n"), return); $ftp->quit; } } elsif (my $ftp = $self->can_run('ftp')) { eval { # no Net::FTP, fallback to ftp.exe require FileHandle; my $fh = FileHandle->new; local $SIG{CHLD} = 'IGNORE'; unless ($fh->open("|$ftp -n")) { warn "Couldn't open ftp: $!\n"; chdir $dir; return; } my @dialog = split(/\n/, <<"END_FTP"); open $host user anonymous anonymous\@example.com cd $path binary get $file $file quit END_FTP foreach (@dialog) { $fh->print("$_\n") } $fh->close; } } else { warn "No working 'ftp' program available!\n"; chdir $dir; return; } unless (-f $file) { warn "Fetching failed: $@\n"; chdir $dir; return; } return if exists $args{size} and -s $file != $args{size}; system($args{run}) if exists $args{run}; unlink($file) if $args{remove}; print(((!exists $args{check_for} or -e $args{check_for}) ? "done!" : "failed! ($!)"), "\n"); chdir $dir; return !$?; } 1; Text-MultiMarkdown-1.000034/inc/Module/Install/Makefile.pm0000644000076500000240000002703211555507676021547 0ustar t0mstaff#line 1 package Module::Install::Makefile; use strict 'vars'; use ExtUtils::MakeMaker (); use Module::Install::Base (); use Fcntl qw/:flock :seek/; use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '0.99'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub Makefile { $_[0] } my %seen = (); sub prompt { shift; # Infinite loop protection my @c = caller(); if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) { die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])"; } # In automated testing or non-interactive session, always use defaults if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) { local $ENV{PERL_MM_USE_DEFAULT} = 1; goto &ExtUtils::MakeMaker::prompt; } else { goto &ExtUtils::MakeMaker::prompt; } } # Store a cleaned up version of the MakeMaker version, # since we need to behave differently in a variety of # ways based on the MM version. my $makemaker = eval $ExtUtils::MakeMaker::VERSION; # If we are passed a param, do a "newer than" comparison. # Otherwise, just return the MakeMaker version. sub makemaker { ( @_ < 2 or $makemaker >= eval($_[1]) ) ? $makemaker : 0 } # Ripped from ExtUtils::MakeMaker 6.56, and slightly modified # as we only need to know here whether the attribute is an array # or a hash or something else (which may or may not be appendable). my %makemaker_argtype = ( C => 'ARRAY', CONFIG => 'ARRAY', # CONFIGURE => 'CODE', # ignore DIR => 'ARRAY', DL_FUNCS => 'HASH', DL_VARS => 'ARRAY', EXCLUDE_EXT => 'ARRAY', EXE_FILES => 'ARRAY', FUNCLIST => 'ARRAY', H => 'ARRAY', IMPORTS => 'HASH', INCLUDE_EXT => 'ARRAY', LIBS => 'ARRAY', # ignore '' MAN1PODS => 'HASH', MAN3PODS => 'HASH', META_ADD => 'HASH', META_MERGE => 'HASH', PL_FILES => 'HASH', PM => 'HASH', PMLIBDIRS => 'ARRAY', PMLIBPARENTDIRS => 'ARRAY', PREREQ_PM => 'HASH', CONFIGURE_REQUIRES => 'HASH', SKIP => 'ARRAY', TYPEMAPS => 'ARRAY', XS => 'HASH', # VERSION => ['version',''], # ignore # _KEEP_AFTER_FLUSH => '', clean => 'HASH', depend => 'HASH', dist => 'HASH', dynamic_lib=> 'HASH', linkext => 'HASH', macro => 'HASH', postamble => 'HASH', realclean => 'HASH', test => 'HASH', tool_autosplit => 'HASH', # special cases where you can use makemaker_append CCFLAGS => 'APPENDABLE', DEFINE => 'APPENDABLE', INC => 'APPENDABLE', LDDLFLAGS => 'APPENDABLE', LDFROM => 'APPENDABLE', ); sub makemaker_args { my ($self, %new_args) = @_; my $args = ( $self->{makemaker_args} ||= {} ); foreach my $key (keys %new_args) { if ($makemaker_argtype{$key}) { if ($makemaker_argtype{$key} eq 'ARRAY') { $args->{$key} = [] unless defined $args->{$key}; unless (ref $args->{$key} eq 'ARRAY') { $args->{$key} = [$args->{$key}] } push @{$args->{$key}}, ref $new_args{$key} eq 'ARRAY' ? @{$new_args{$key}} : $new_args{$key}; } elsif ($makemaker_argtype{$key} eq 'HASH') { $args->{$key} = {} unless defined $args->{$key}; foreach my $skey (keys %{ $new_args{$key} }) { $args->{$key}{$skey} = $new_args{$key}{$skey}; } } elsif ($makemaker_argtype{$key} eq 'APPENDABLE') { $self->makemaker_append($key => $new_args{$key}); } } else { if (defined $args->{$key}) { warn qq{MakeMaker attribute "$key" is overriden; use "makemaker_append" to append values\n}; } $args->{$key} = $new_args{$key}; } } return $args; } # For mm args that take multiple space-seperated args, # append an argument to the current list. sub makemaker_append { my $self = shift; my $name = shift; my $args = $self->makemaker_args; $args->{$name} = defined $args->{$name} ? join( ' ', $args->{$name}, @_ ) : join( ' ', @_ ); } sub build_subdirs { my $self = shift; my $subdirs = $self->makemaker_args->{DIR} ||= []; for my $subdir (@_) { push @$subdirs, $subdir; } } sub clean_files { my $self = shift; my $clean = $self->makemaker_args->{clean} ||= {}; %$clean = ( %$clean, FILES => join ' ', grep { length $_ } ($clean->{FILES} || (), @_), ); } sub realclean_files { my $self = shift; my $realclean = $self->makemaker_args->{realclean} ||= {}; %$realclean = ( %$realclean, FILES => join ' ', grep { length $_ } ($realclean->{FILES} || (), @_), ); } sub libs { my $self = shift; my $libs = ref $_[0] ? shift : [ shift ]; $self->makemaker_args( LIBS => $libs ); } sub inc { my $self = shift; $self->makemaker_args( INC => shift ); } sub _wanted_t { } sub tests_recursive { my $self = shift; my $dir = shift || 't'; unless ( -d $dir ) { die "tests_recursive dir '$dir' does not exist"; } my %tests = map { $_ => 1 } split / /, ($self->tests || ''); require File::Find; File::Find::find( sub { /\.t$/ and -f $_ and $tests{"$File::Find::dir/*.t"} = 1 }, $dir ); $self->tests( join ' ', sort keys %tests ); } sub write { my $self = shift; die "&Makefile->write() takes no arguments\n" if @_; # Check the current Perl version my $perl_version = $self->perl_version; if ( $perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; } # Make sure we have a new enough MakeMaker require ExtUtils::MakeMaker; if ( $perl_version and $self->_cmp($perl_version, '5.006') >= 0 ) { # MakeMaker can complain about module versions that include # an underscore, even though its own version may contain one! # Hence the funny regexp to get rid of it. See RT #35800 # for details. my $v = $ExtUtils::MakeMaker::VERSION =~ /^(\d+\.\d+)/; $self->build_requires( 'ExtUtils::MakeMaker' => $v ); $self->configure_requires( 'ExtUtils::MakeMaker' => $v ); } else { # Allow legacy-compatibility with 5.005 by depending on the # most recent EU:MM that supported 5.005. $self->build_requires( 'ExtUtils::MakeMaker' => 6.42 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.42 ); } # Generate the MakeMaker params my $args = $self->makemaker_args; $args->{DISTNAME} = $self->name; $args->{NAME} = $self->module_name || $self->name; $args->{NAME} =~ s/-/::/g; $args->{VERSION} = $self->version or die <<'EOT'; ERROR: Can't determine distribution version. Please specify it explicitly via 'version' in Makefile.PL, or set a valid $VERSION in a module, and provide its file path via 'version_from' (or 'all_from' if you prefer) in Makefile.PL. EOT $DB::single = 1; if ( $self->tests ) { my @tests = split ' ', $self->tests; my %seen; $args->{test} = { TESTS => (join ' ', grep {!$seen{$_}++} @tests), }; } elsif ( $Module::Install::ExtraTests::use_extratests ) { # Module::Install::ExtraTests doesn't set $self->tests and does its own tests via harness. # So, just ignore our xt tests here. } elsif ( -d 'xt' and ($Module::Install::AUTHOR or $ENV{RELEASE_TESTING}) ) { $args->{test} = { TESTS => join( ' ', map { "$_/*.t" } grep { -d $_ } qw{ t xt } ), }; } if ( $] >= 5.005 ) { $args->{ABSTRACT} = $self->abstract; $args->{AUTHOR} = join ', ', @{$self->author || []}; } if ( $self->makemaker(6.10) ) { $args->{NO_META} = 1; #$args->{NO_MYMETA} = 1; } if ( $self->makemaker(6.17) and $self->sign ) { $args->{SIGN} = 1; } unless ( $self->is_admin ) { delete $args->{SIGN}; } if ( $self->makemaker(6.31) and $self->license ) { $args->{LICENSE} = $self->license; } my $prereq = ($args->{PREREQ_PM} ||= {}); %$prereq = ( %$prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->requires) ); # Remove any reference to perl, PREREQ_PM doesn't support it delete $args->{PREREQ_PM}->{perl}; # Merge both kinds of requires into BUILD_REQUIRES my $build_prereq = ($args->{BUILD_REQUIRES} ||= {}); %$build_prereq = ( %$build_prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->configure_requires, $self->build_requires) ); # Remove any reference to perl, BUILD_REQUIRES doesn't support it delete $args->{BUILD_REQUIRES}->{perl}; # Delete bundled dists from prereq_pm, add it to Makefile DIR my $subdirs = ($args->{DIR} || []); if ($self->bundles) { my %processed; foreach my $bundle (@{ $self->bundles }) { my ($mod_name, $dist_dir) = @$bundle; delete $prereq->{$mod_name}; $dist_dir = File::Basename::basename($dist_dir); # dir for building this module if (not exists $processed{$dist_dir}) { if (-d $dist_dir) { # List as sub-directory to be processed by make push @$subdirs, $dist_dir; } # Else do nothing: the module is already present on the system $processed{$dist_dir} = undef; } } } unless ( $self->makemaker('6.55_03') ) { %$prereq = (%$prereq,%$build_prereq); delete $args->{BUILD_REQUIRES}; } if ( my $perl_version = $self->perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; if ( $self->makemaker(6.48) ) { $args->{MIN_PERL_VERSION} = $perl_version; } } if ($self->installdirs) { warn qq{old INSTALLDIRS (probably set by makemaker_args) is overriden by installdirs\n} if $args->{INSTALLDIRS}; $args->{INSTALLDIRS} = $self->installdirs; } my %args = map { ( $_ => $args->{$_} ) } grep {defined($args->{$_} ) } keys %$args; my $user_preop = delete $args{dist}->{PREOP}; if ( my $preop = $self->admin->preop($user_preop) ) { foreach my $key ( keys %$preop ) { $args{dist}->{$key} = $preop->{$key}; } } my $mm = ExtUtils::MakeMaker::WriteMakefile(%args); $self->fix_up_makefile($mm->{FIRST_MAKEFILE} || 'Makefile'); } sub fix_up_makefile { my $self = shift; my $makefile_name = shift; my $top_class = ref($self->_top) || ''; my $top_version = $self->_top->VERSION || ''; my $preamble = $self->preamble ? "# Preamble by $top_class $top_version\n" . $self->preamble : ''; my $postamble = "# Postamble by $top_class $top_version\n" . ($self->postamble || ''); local *MAKEFILE; open MAKEFILE, "+< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!"; eval { flock MAKEFILE, LOCK_EX }; my $makefile = do { local $/; }; $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /; $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g; $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g; $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m; $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m; # Module::Install will never be used to build the Core Perl # Sometimes PERL_LIB and PERL_ARCHLIB get written anyway, which breaks # PREFIX/PERL5LIB, and thus, install_share. Blank them if they exist $makefile =~ s/^PERL_LIB = .+/PERL_LIB =/m; #$makefile =~ s/^PERL_ARCHLIB = .+/PERL_ARCHLIB =/m; # Perl 5.005 mentions PERL_LIB explicitly, so we have to remove that as well. $makefile =~ s/(\"?)-I\$\(PERL_LIB\)\1//g; # XXX - This is currently unused; not sure if it breaks other MM-users # $makefile =~ s/^pm_to_blib\s+:\s+/pm_to_blib :: /mg; seek MAKEFILE, 0, SEEK_SET; truncate MAKEFILE, 0; print MAKEFILE "$preamble$makefile$postamble" or die $!; close MAKEFILE or die $!; 1; } sub preamble { my ($self, $text) = @_; $self->{preamble} = $text . $self->{preamble} if defined $text; $self->{preamble}; } sub postamble { my ($self, $text) = @_; $self->{postamble} ||= $self->admin->postamble; $self->{postamble} .= $text if defined $text; $self->{postamble} } 1; __END__ #line 541 Text-MultiMarkdown-1.000034/inc/Module/Install/Metadata.pm0000644000076500000240000004302011555507676021545 0ustar t0mstaff#line 1 package Module::Install::Metadata; use strict 'vars'; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '0.99'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } my @boolean_keys = qw{ sign }; my @scalar_keys = qw{ name module_name abstract version distribution_type tests installdirs }; my @tuple_keys = qw{ configure_requires build_requires requires recommends bundles resources }; my @resource_keys = qw{ homepage bugtracker repository }; my @array_keys = qw{ keywords author }; *authors = \&author; sub Meta { shift } sub Meta_BooleanKeys { @boolean_keys } sub Meta_ScalarKeys { @scalar_keys } sub Meta_TupleKeys { @tuple_keys } sub Meta_ResourceKeys { @resource_keys } sub Meta_ArrayKeys { @array_keys } foreach my $key ( @boolean_keys ) { *$key = sub { my $self = shift; if ( defined wantarray and not @_ ) { return $self->{values}->{$key}; } $self->{values}->{$key} = ( @_ ? $_[0] : 1 ); return $self; }; } foreach my $key ( @scalar_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} = shift; return $self; }; } foreach my $key ( @array_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} ||= []; push @{$self->{values}->{$key}}, @_; return $self; }; } foreach my $key ( @resource_keys ) { *$key = sub { my $self = shift; unless ( @_ ) { return () unless $self->{values}->{resources}; return map { $_->[1] } grep { $_->[0] eq $key } @{ $self->{values}->{resources} }; } return $self->{values}->{resources}->{$key} unless @_; my $uri = shift or die( "Did not provide a value to $key()" ); $self->resources( $key => $uri ); return 1; }; } foreach my $key ( grep { $_ ne "resources" } @tuple_keys) { *$key = sub { my $self = shift; return $self->{values}->{$key} unless @_; my @added; while ( @_ ) { my $module = shift or last; my $version = shift || 0; push @added, [ $module, $version ]; } push @{ $self->{values}->{$key} }, @added; return map {@$_} @added; }; } # Resource handling my %lc_resource = map { $_ => 1 } qw{ homepage license bugtracker repository }; sub resources { my $self = shift; while ( @_ ) { my $name = shift or last; my $value = shift or next; if ( $name eq lc $name and ! $lc_resource{$name} ) { die("Unsupported reserved lowercase resource '$name'"); } $self->{values}->{resources} ||= []; push @{ $self->{values}->{resources} }, [ $name, $value ]; } $self->{values}->{resources}; } # Aliases for build_requires that will have alternative # meanings in some future version of META.yml. sub test_requires { shift->build_requires(@_) } sub install_requires { shift->build_requires(@_) } # Aliases for installdirs options sub install_as_core { $_[0]->installdirs('perl') } sub install_as_cpan { $_[0]->installdirs('site') } sub install_as_site { $_[0]->installdirs('site') } sub install_as_vendor { $_[0]->installdirs('vendor') } sub dynamic_config { my $self = shift; unless ( @_ ) { warn "You MUST provide an explicit true/false value to dynamic_config\n"; return $self; } $self->{values}->{dynamic_config} = $_[0] ? 1 : 0; return 1; } sub perl_version { my $self = shift; return $self->{values}->{perl_version} unless @_; my $version = shift or die( "Did not provide a value to perl_version()" ); # Normalize the version $version = $self->_perl_version($version); # We don't support the reall old versions unless ( $version >= 5.005 ) { die "Module::Install only supports 5.005 or newer (use ExtUtils::MakeMaker)\n"; } $self->{values}->{perl_version} = $version; } sub all_from { my ( $self, $file ) = @_; unless ( defined($file) ) { my $name = $self->name or die( "all_from called with no args without setting name() first" ); $file = join('/', 'lib', split(/-/, $name)) . '.pm'; $file =~ s{.*/}{} unless -e $file; unless ( -e $file ) { die("all_from cannot find $file from $name"); } } unless ( -f $file ) { die("The path '$file' does not exist, or is not a file"); } $self->{values}{all_from} = $file; # Some methods pull from POD instead of code. # If there is a matching .pod, use that instead my $pod = $file; $pod =~ s/\.pm$/.pod/i; $pod = $file unless -e $pod; # Pull the different values $self->name_from($file) unless $self->name; $self->version_from($file) unless $self->version; $self->perl_version_from($file) unless $self->perl_version; $self->author_from($pod) unless @{$self->author || []}; $self->license_from($pod) unless $self->license; $self->abstract_from($pod) unless $self->abstract; return 1; } sub provides { my $self = shift; my $provides = ( $self->{values}->{provides} ||= {} ); %$provides = (%$provides, @_) if @_; return $provides; } sub auto_provides { my $self = shift; return $self unless $self->is_admin; unless (-e 'MANIFEST') { warn "Cannot deduce auto_provides without a MANIFEST, skipping\n"; return $self; } # Avoid spurious warnings as we are not checking manifest here. local $SIG{__WARN__} = sub {1}; require ExtUtils::Manifest; local *ExtUtils::Manifest::manicheck = sub { return }; require Module::Build; my $build = Module::Build->new( dist_name => $self->name, dist_version => $self->version, license => $self->license, ); $self->provides( %{ $build->find_dist_packages || {} } ); } sub feature { my $self = shift; my $name = shift; my $features = ( $self->{values}->{features} ||= [] ); my $mods; if ( @_ == 1 and ref( $_[0] ) ) { # The user used ->feature like ->features by passing in the second # argument as a reference. Accomodate for that. $mods = $_[0]; } else { $mods = \@_; } my $count = 0; push @$features, ( $name => [ map { ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ : @$_ : $_ } @$mods ] ); return @$features; } sub features { my $self = shift; while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) { $self->feature( $name, @$mods ); } return $self->{values}->{features} ? @{ $self->{values}->{features} } : (); } sub no_index { my $self = shift; my $type = shift; push @{ $self->{values}->{no_index}->{$type} }, @_ if $type; return $self->{values}->{no_index}; } sub read { my $self = shift; $self->include_deps( 'YAML::Tiny', 0 ); require YAML::Tiny; my $data = YAML::Tiny::LoadFile('META.yml'); # Call methods explicitly in case user has already set some values. while ( my ( $key, $value ) = each %$data ) { next unless $self->can($key); if ( ref $value eq 'HASH' ) { while ( my ( $module, $version ) = each %$value ) { $self->can($key)->($self, $module => $version ); } } else { $self->can($key)->($self, $value); } } return $self; } sub write { my $self = shift; return $self unless $self->is_admin; $self->admin->write_meta; return $self; } sub version_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->version( ExtUtils::MM_Unix->parse_version($file) ); # for version integrity check $self->makemaker_args( VERSION_FROM => $file ); } sub abstract_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->abstract( bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix' )->parse_abstract($file) ); } # Add both distribution and module name sub name_from { my ($self, $file) = @_; if ( Module::Install::_read($file) =~ m/ ^ \s* package \s* ([\w:]+) \s* ; /ixms ) { my ($name, $module_name) = ($1, $1); $name =~ s{::}{-}g; $self->name($name); unless ( $self->module_name ) { $self->module_name($module_name); } } else { die("Cannot determine name from $file\n"); } } sub _extract_perl_version { if ( $_[0] =~ m/ ^\s* (?:use|require) \s* v? ([\d_\.]+) \s* ; /ixms ) { my $perl_version = $1; $perl_version =~ s{_}{}g; return $perl_version; } else { return; } } sub perl_version_from { my $self = shift; my $perl_version=_extract_perl_version(Module::Install::_read($_[0])); if ($perl_version) { $self->perl_version($perl_version); } else { warn "Cannot determine perl version info from $_[0]\n"; return; } } sub author_from { my $self = shift; my $content = Module::Install::_read($_[0]); if ($content =~ m/ =head \d \s+ (?:authors?)\b \s* ([^\n]*) | =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s* .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s* ([^\n]*) /ixms) { my $author = $1 || $2; # XXX: ugly but should work anyway... if (eval "require Pod::Escapes; 1") { # Pod::Escapes has a mapping table. # It's in core of perl >= 5.9.3, and should be installed # as one of the Pod::Simple's prereqs, which is a prereq # of Pod::Text 3.x (see also below). $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $Pod::Escapes::Name2character_number{$1} ? chr($Pod::Escapes::Name2character_number{$1}) : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } elsif (eval "require Pod::Text; 1" && $Pod::Text::VERSION < 3) { # Pod::Text < 3.0 has yet another mapping table, # though the table name of 2.x and 1.x are different. # (1.x is in core of Perl < 5.6, 2.x is in core of # Perl < 5.9.3) my $mapping = ($Pod::Text::VERSION < 2) ? \%Pod::Text::HTML_Escapes : \%Pod::Text::ESCAPES; $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $mapping->{$1} ? $mapping->{$1} : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } else { $author =~ s{E}{<}g; $author =~ s{E}{>}g; } $self->author($author); } else { warn "Cannot determine author info from $_[0]\n"; } } #Stolen from M::B my %license_urls = ( perl => 'http://dev.perl.org/licenses/', apache => 'http://apache.org/licenses/LICENSE-2.0', apache_1_1 => 'http://apache.org/licenses/LICENSE-1.1', artistic => 'http://opensource.org/licenses/artistic-license.php', artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php', lgpl => 'http://opensource.org/licenses/lgpl-license.php', lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php', lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html', bsd => 'http://opensource.org/licenses/bsd-license.php', gpl => 'http://opensource.org/licenses/gpl-license.php', gpl2 => 'http://opensource.org/licenses/gpl-2.0.php', gpl3 => 'http://opensource.org/licenses/gpl-3.0.html', mit => 'http://opensource.org/licenses/mit-license.php', mozilla => 'http://opensource.org/licenses/mozilla1.1.php', open_source => undef, unrestricted => undef, restrictive => undef, unknown => undef, ); sub license { my $self = shift; return $self->{values}->{license} unless @_; my $license = shift or die( 'Did not provide a value to license()' ); $license = __extract_license($license) || lc $license; $self->{values}->{license} = $license; # Automatically fill in license URLs if ( $license_urls{$license} ) { $self->resources( license => $license_urls{$license} ); } return 1; } sub _extract_license { my $pod = shift; my $matched; return __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ L(?i:ICEN[CS]E|ICENSING)\b.*?) (=head \d.*|=cut.*|)\z /xms ) || __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ (?:C(?i:OPYRIGHTS?)|L(?i:EGAL))\b.*?) (=head \d.*|=cut.*|)\z /xms ); } sub __extract_license { my $license_text = shift or return; my @phrases = ( '(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1, '(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1, 'Artistic and GPL' => 'perl', 1, 'GNU general public license' => 'gpl', 1, 'GNU public license' => 'gpl', 1, 'GNU lesser general public license' => 'lgpl', 1, 'GNU lesser public license' => 'lgpl', 1, 'GNU library general public license' => 'lgpl', 1, 'GNU library public license' => 'lgpl', 1, 'GNU Free Documentation license' => 'unrestricted', 1, 'GNU Affero General Public License' => 'open_source', 1, '(?:Free)?BSD license' => 'bsd', 1, 'Artistic license' => 'artistic', 1, 'Apache (?:Software )?license' => 'apache', 1, 'GPL' => 'gpl', 1, 'LGPL' => 'lgpl', 1, 'BSD' => 'bsd', 1, 'Artistic' => 'artistic', 1, 'MIT' => 'mit', 1, 'Mozilla Public License' => 'mozilla', 1, 'Q Public License' => 'open_source', 1, 'OpenSSL License' => 'unrestricted', 1, 'SSLeay License' => 'unrestricted', 1, 'zlib License' => 'open_source', 1, 'proprietary' => 'proprietary', 0, ); while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) { $pattern =~ s#\s+#\\s+#gs; if ( $license_text =~ /\b$pattern\b/i ) { return $license; } } return ''; } sub license_from { my $self = shift; if (my $license=_extract_license(Module::Install::_read($_[0]))) { $self->license($license); } else { warn "Cannot determine license info from $_[0]\n"; return 'unknown'; } } sub _extract_bugtracker { my @links = $_[0] =~ m#L<( \Qhttp://rt.cpan.org/\E[^>]+| \Qhttp://github.com/\E[\w_]+/[\w_]+/issues| \Qhttp://code.google.com/p/\E[\w_\-]+/issues/list )>#gx; my %links; @links{@links}=(); @links=keys %links; return @links; } sub bugtracker_from { my $self = shift; my $content = Module::Install::_read($_[0]); my @links = _extract_bugtracker($content); unless ( @links ) { warn "Cannot determine bugtracker info from $_[0]\n"; return 0; } if ( @links > 1 ) { warn "Found more than one bugtracker link in $_[0]\n"; return 0; } # Set the bugtracker bugtracker( $links[0] ); return 1; } sub requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->requires( $module => $version ); } } sub test_requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->test_requires( $module => $version ); } } # Convert triple-part versions (eg, 5.6.1 or 5.8.9) to # numbers (eg, 5.006001 or 5.008009). # Also, convert double-part versions (eg, 5.8) sub _perl_version { my $v = $_[-1]; $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e; $v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e; $v =~ s/(\.\d\d\d)000$/$1/; $v =~ s/_.+$//; if ( ref($v) ) { # Numify $v = $v + 0; } return $v; } sub add_metadata { my $self = shift; my %hash = @_; for my $key (keys %hash) { warn "add_metadata: $key is not prefixed with 'x_'.\n" . "Use appopriate function to add non-private metadata.\n" unless $key =~ /^x_/; $self->{values}->{$key} = $hash{$key}; } } ###################################################################### # MYMETA Support sub WriteMyMeta { die "WriteMyMeta has been deprecated"; } sub write_mymeta_yaml { my $self = shift; # We need YAML::Tiny to write the MYMETA.yml file unless ( eval { require YAML::Tiny; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.yml\n"; YAML::Tiny::DumpFile('MYMETA.yml', $meta); } sub write_mymeta_json { my $self = shift; # We need JSON to write the MYMETA.json file unless ( eval { require JSON; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.json\n"; Module::Install::_write( 'MYMETA.json', JSON->new->pretty(1)->canonical->encode($meta), ); } sub _write_mymeta_data { my $self = shift; # If there's no existing META.yml there is nothing we can do return undef unless -f 'META.yml'; # We need Parse::CPAN::Meta to load the file unless ( eval { require Parse::CPAN::Meta; 1; } ) { return undef; } # Merge the perl version into the dependencies my $val = $self->Meta->{values}; my $perl = delete $val->{perl_version}; if ( $perl ) { $val->{requires} ||= []; my $requires = $val->{requires}; # Canonize to three-dot version after Perl 5.6 if ( $perl >= 5.006 ) { $perl =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e } unshift @$requires, [ perl => $perl ]; } # Load the advisory META.yml file my @yaml = Parse::CPAN::Meta::LoadFile('META.yml'); my $meta = $yaml[0]; # Overwrite the non-configure dependency hashs delete $meta->{requires}; delete $meta->{build_requires}; delete $meta->{recommends}; if ( exists $val->{requires} ) { $meta->{requires} = { map { @$_ } @{ $val->{requires} } }; } if ( exists $val->{build_requires} ) { $meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } }; } return $meta; } 1; Text-MultiMarkdown-1.000034/inc/Module/Install/Scripts.pm0000644000076500000240000000101111555507677021447 0ustar t0mstaff#line 1 package Module::Install::Scripts; use strict 'vars'; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '0.99'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub install_script { my $self = shift; my $args = $self->makemaker_args; my $exe = $args->{EXE_FILES} ||= []; foreach ( @_ ) { if ( -f $_ ) { push @$exe, $_; } elsif ( -d 'script' and -f "script/$_" ) { push @$exe, "script/$_"; } else { die("Cannot find script '$_'"); } } } 1; Text-MultiMarkdown-1.000034/inc/Module/Install/Win32.pm0000644000076500000240000000340311555507677020731 0ustar t0mstaff#line 1 package Module::Install::Win32; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '0.99'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # determine if the user needs nmake, and download it if needed sub check_nmake { my $self = shift; $self->load('can_run'); $self->load('get_file'); require Config; return unless ( $^O eq 'MSWin32' and $Config::Config{make} and $Config::Config{make} =~ /^nmake\b/i and ! $self->can_run('nmake') ); print "The required 'nmake' executable not found, fetching it...\n"; require File::Basename; my $rv = $self->get_file( url => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe', ftp_url => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe', local_dir => File::Basename::dirname($^X), size => 51928, run => 'Nmake15.exe /o > nul', check_for => 'Nmake.exe', remove => 1, ); die <<'END_MESSAGE' unless $rv; ------------------------------------------------------------------------------- Since you are using Microsoft Windows, you will need the 'nmake' utility before installation. It's available at: http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe or ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe Please download the file manually, save it to a directory in %PATH% (e.g. C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to that directory, and run "Nmake15.exe" from there; that will create the 'nmake.exe' file needed by this module. You may then resume the installation process described in README. ------------------------------------------------------------------------------- END_MESSAGE } 1; Text-MultiMarkdown-1.000034/inc/Module/Install/WriteAll.pm0000644000076500000240000000237611555507677021562 0ustar t0mstaff#line 1 package Module::Install::WriteAll; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '0.99'; @ISA = qw{Module::Install::Base}; $ISCORE = 1; } sub WriteAll { my $self = shift; my %args = ( meta => 1, sign => 0, inline => 0, check_nmake => 1, @_, ); $self->sign(1) if $args{sign}; $self->admin->WriteAll(%args) if $self->is_admin; $self->check_nmake if $args{check_nmake}; unless ( $self->makemaker_args->{PL_FILES} ) { # XXX: This still may be a bit over-defensive... unless ($self->makemaker(6.25)) { $self->makemaker_args( PL_FILES => {} ) if -f 'Build.PL'; } } # Until ExtUtils::MakeMaker support MYMETA.yml, make sure # we clean it up properly ourself. $self->realclean_files('MYMETA.yml'); if ( $args{inline} ) { $self->Inline->write; } else { $self->Makefile->write; } # The Makefile write process adds a couple of dependencies, # so write the META.yml files after the Makefile. if ( $args{meta} ) { $self->Meta->write; } # Experimental support for MYMETA if ( $ENV{X_MYMETA} ) { if ( $ENV{X_MYMETA} eq 'JSON' ) { $self->Meta->write_mymeta_json; } else { $self->Meta->write_mymeta_yaml; } } return 1; } 1; Text-MultiMarkdown-1.000034/inc/Module/Install.pm0000644000076500000240000003002611555507676020027 0ustar t0mstaff#line 1 package Module::Install; # For any maintainers: # The load order for Module::Install is a bit magic. # It goes something like this... # # IF ( host has Module::Install installed, creating author mode ) { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install # 3. The installed version of inc::Module::Install loads # 4. inc::Module::Install calls "require Module::Install" # 5. The ./inc/ version of Module::Install loads # } ELSE { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install # 3. The ./inc/ version of Module::Install loads # } use 5.005; use strict 'vars'; use Cwd (); use File::Find (); use File::Path (); use vars qw{$VERSION $MAIN}; BEGIN { # All Module::Install core packages now require synchronised versions. # This will be used to ensure we don't accidentally load old or # different versions of modules. # This is not enforced yet, but will be some time in the next few # releases once we can make sure it won't clash with custom # Module::Install extensions. $VERSION = '0.99'; # Storage for the pseudo-singleton $MAIN = undef; *inc::Module::Install::VERSION = *VERSION; @inc::Module::Install::ISA = __PACKAGE__; } sub import { my $class = shift; my $self = $class->new(@_); my $who = $self->_caller; #------------------------------------------------------------- # all of the following checks should be included in import(), # to allow "eval 'require Module::Install; 1' to test # installation of Module::Install. (RT #51267) #------------------------------------------------------------- # Whether or not inc::Module::Install is actually loaded, the # $INC{inc/Module/Install.pm} is what will still get set as long as # the caller loaded module this in the documented manner. # If not set, the caller may NOT have loaded the bundled version, and thus # they may not have a MI version that works with the Makefile.PL. This would # result in false errors or unexpected behaviour. And we don't want that. my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm'; unless ( $INC{$file} ) { die <<"END_DIE" } Please invoke ${\__PACKAGE__} with: use inc::${\__PACKAGE__}; not: use ${\__PACKAGE__}; END_DIE # This reportedly fixes a rare Win32 UTC file time issue, but # as this is a non-cross-platform XS module not in the core, # we shouldn't really depend on it. See RT #24194 for detail. # (Also, this module only supports Perl 5.6 and above). eval "use Win32::UTCFileTime" if $^O eq 'MSWin32' && $] >= 5.006; # If the script that is loading Module::Install is from the future, # then make will detect this and cause it to re-run over and over # again. This is bad. Rather than taking action to touch it (which # is unreliable on some platforms and requires write permissions) # for now we should catch this and refuse to run. if ( -f $0 ) { my $s = (stat($0))[9]; # If the modification time is only slightly in the future, # sleep briefly to remove the problem. my $a = $s - time; if ( $a > 0 and $a < 5 ) { sleep 5 } # Too far in the future, throw an error. my $t = time; if ( $s > $t ) { die <<"END_DIE" } Your installer $0 has a modification time in the future ($s > $t). This is known to create infinite loops in make. Please correct this, then run $0 again. END_DIE } # Build.PL was formerly supported, but no longer is due to excessive # difficulty in implementing every single feature twice. if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" } Module::Install no longer supports Build.PL. It was impossible to maintain duel backends, and has been deprecated. Please remove all Build.PL files and only use the Makefile.PL installer. END_DIE #------------------------------------------------------------- # To save some more typing in Module::Install installers, every... # use inc::Module::Install # ...also acts as an implicit use strict. $^H |= strict::bits(qw(refs subs vars)); #------------------------------------------------------------- unless ( -f $self->{file} ) { foreach my $key (keys %INC) { delete $INC{$key} if $key =~ /Module\/Install/; } local $^W; require "$self->{path}/$self->{dispatch}.pm"; File::Path::mkpath("$self->{prefix}/$self->{author}"); $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self ); $self->{admin}->init; @_ = ($class, _self => $self); goto &{"$self->{name}::import"}; } local $^W; *{"${who}::AUTOLOAD"} = $self->autoload; $self->preload; # Unregister loader and worker packages so subdirs can use them again delete $INC{'inc/Module/Install.pm'}; delete $INC{'Module/Install.pm'}; # Save to the singleton $MAIN = $self; return 1; } sub autoload { my $self = shift; my $who = $self->_caller; my $cwd = Cwd::cwd(); my $sym = "${who}::AUTOLOAD"; $sym->{$cwd} = sub { my $pwd = Cwd::cwd(); if ( my $code = $sym->{$pwd} ) { # Delegate back to parent dirs goto &$code unless $cwd eq $pwd; } unless ($$sym =~ s/([^:]+)$//) { # XXX: it looks like we can't retrieve the missing function # via $$sym (usually $main::AUTOLOAD) in this case. # I'm still wondering if we should slurp Makefile.PL to # get some context or not ... my ($package, $file, $line) = caller; die <<"EOT"; Unknown function is found at $file line $line. Execution of $file aborted due to runtime errors. If you're a contributor to a project, you may need to install some Module::Install extensions from CPAN (or other repository). If you're a user of a module, please contact the author. EOT } my $method = $1; if ( uc($method) eq $method ) { # Do nothing return; } elsif ( $method =~ /^_/ and $self->can($method) ) { # Dispatch to the root M:I class return $self->$method(@_); } # Dispatch to the appropriate plugin unshift @_, ( $self, $1 ); goto &{$self->can('call')}; }; } sub preload { my $self = shift; unless ( $self->{extensions} ) { $self->load_extensions( "$self->{prefix}/$self->{path}", $self ); } my @exts = @{$self->{extensions}}; unless ( @exts ) { @exts = $self->{admin}->load_all_extensions; } my %seen; foreach my $obj ( @exts ) { while (my ($method, $glob) = each %{ref($obj) . '::'}) { next unless $obj->can($method); next if $method =~ /^_/; next if $method eq uc($method); $seen{$method}++; } } my $who = $self->_caller; foreach my $name ( sort keys %seen ) { local $^W; *{"${who}::$name"} = sub { ${"${who}::AUTOLOAD"} = "${who}::$name"; goto &{"${who}::AUTOLOAD"}; }; } } sub new { my ($class, %args) = @_; delete $INC{'FindBin.pm'}; require FindBin; # ignore the prefix on extension modules built from top level. my $base_path = Cwd::abs_path($FindBin::Bin); unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) { delete $args{prefix}; } return $args{_self} if $args{_self}; $args{dispatch} ||= 'Admin'; $args{prefix} ||= 'inc'; $args{author} ||= ($^O eq 'VMS' ? '_author' : '.author'); $args{bundle} ||= 'inc/BUNDLES'; $args{base} ||= $base_path; $class =~ s/^\Q$args{prefix}\E:://; $args{name} ||= $class; $args{version} ||= $class->VERSION; unless ( $args{path} ) { $args{path} = $args{name}; $args{path} =~ s!::!/!g; } $args{file} ||= "$args{base}/$args{prefix}/$args{path}.pm"; $args{wrote} = 0; bless( \%args, $class ); } sub call { my ($self, $method) = @_; my $obj = $self->load($method) or return; splice(@_, 0, 2, $obj); goto &{$obj->can($method)}; } sub load { my ($self, $method) = @_; $self->load_extensions( "$self->{prefix}/$self->{path}", $self ) unless $self->{extensions}; foreach my $obj (@{$self->{extensions}}) { return $obj if $obj->can($method); } my $admin = $self->{admin} or die <<"END_DIE"; The '$method' method does not exist in the '$self->{prefix}' path! Please remove the '$self->{prefix}' directory and run $0 again to load it. END_DIE my $obj = $admin->load($method, 1); push @{$self->{extensions}}, $obj; $obj; } sub load_extensions { my ($self, $path, $top) = @_; my $should_reload = 0; unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) { unshift @INC, $self->{prefix}; $should_reload = 1; } foreach my $rv ( $self->find_extensions($path) ) { my ($file, $pkg) = @{$rv}; next if $self->{pathnames}{$pkg}; local $@; my $new = eval { local $^W; require $file; $pkg->can('new') }; unless ( $new ) { warn $@ if $@; next; } $self->{pathnames}{$pkg} = $should_reload ? delete $INC{$file} : $INC{$file}; push @{$self->{extensions}}, &{$new}($pkg, _top => $top ); } $self->{extensions} ||= []; } sub find_extensions { my ($self, $path) = @_; my @found; File::Find::find( sub { my $file = $File::Find::name; return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is; my $subpath = $1; return if lc($subpath) eq lc($self->{dispatch}); $file = "$self->{path}/$subpath.pm"; my $pkg = "$self->{name}::$subpath"; $pkg =~ s!/!::!g; # If we have a mixed-case package name, assume case has been preserved # correctly. Otherwise, root through the file to locate the case-preserved # version of the package name. if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) { my $content = Module::Install::_read($subpath . '.pm'); my $in_pod = 0; foreach ( split //, $content ) { $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; next if ($in_pod || /^=cut/); # skip pod text next if /^\s*#/; # and comments if ( m/^\s*package\s+($pkg)\s*;/i ) { $pkg = $1; last; } } } push @found, [ $file, $pkg ]; }, $path ) if -d $path; @found; } ##################################################################### # Common Utility Functions sub _caller { my $depth = 0; my $call = caller($depth); while ( $call eq __PACKAGE__ ) { $depth++; $call = caller($depth); } return $call; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _read { local *FH; open( FH, '<', $_[0] ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_NEW sub _read { local *FH; open( FH, "< $_[0]" ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_OLD sub _readperl { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; $string =~ s/(\n)\n*__(?:DATA|END)__\b.*\z/$1/s; $string =~ s/\n\n=\w+.+?\n\n=cut\b.+?\n+/\n\n/sg; return $string; } sub _readpod { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; return $string if $_[0] =~ /\.pod\z/; $string =~ s/(^|\n=cut\b.+?\n+)[^=\s].+?\n(\n=\w+|\z)/$1$2/sg; $string =~ s/\n*=pod\b[^\n]*\n+/\n\n/sg; $string =~ s/\n*=cut\b[^\n]*\n+/\n\n/sg; $string =~ s/^\n+//s; return $string; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _write { local *FH; open( FH, '>', $_[0] ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_NEW sub _write { local *FH; open( FH, "> $_[0]" ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_OLD # _version is for processing module versions (eg, 1.03_05) not # Perl versions (eg, 5.8.1). sub _version ($) { my $s = shift || 0; my $d =()= $s =~ /(\.)/g; if ( $d >= 2 ) { # Normalise multipart versions $s =~ s/(\.)(\d{1,3})/sprintf("$1%03d",$2)/eg; } $s =~ s/^(\d+)\.?//; my $l = $1 || 0; my @v = map { $_ . '0' x (3 - length $_) } $s =~ /(\d{1,3})\D?/g; $l = $l . '.' . join '', @v if @v; return $l + 0; } sub _cmp ($$) { _version($_[0]) <=> _version($_[1]); } # Cloned from Params::Util::_CLASS sub _CLASS ($) { ( defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s ) ? $_[0] : undef; } 1; # Copyright 2008 - 2010 Adam Kennedy. Text-MultiMarkdown-1.000034/lib/0000755000076500000240000000000011555510012014604 5ustar t0mstaffText-MultiMarkdown-1.000034/lib/Text/0000755000076500000240000000000011555510012015530 5ustar t0mstaffText-MultiMarkdown-1.000034/lib/Text/MultiMarkdown.pm0000644000076500000240000012061011555507773020707 0ustar t0mstaffpackage Text::MultiMarkdown; require 5.008_000; use strict; use warnings; use re 'eval'; use Digest::MD5 qw(md5_hex); use Encode qw(); use Carp qw(croak); use base qw(Text::Markdown); our $VERSION = '1.000034'; # 1.0.34 $VERSION = eval $VERSION; our @EXPORT_OK = qw(markdown); =head1 NAME Text::MultiMarkdown - Convert MultiMarkdown syntax to (X)HTML =head1 SYNOPSIS use Text::MultiMarkdown 'markdown'; my $html = markdown($text); use Text::MultiMarkdown 'markdown'; my $html = markdown( $text, { empty_element_suffix => '>', tab_width => 2, use_wikilinks => 1, } ); use Text::MultiMarkdown; my $m = Text::MultiMarkdown->new; my $html = $m->markdown($text); use Text::MultiMarkdown; my $m = Text::MultiMarkdown->new( empty_element_suffix => '>', tab_width => 2, use_wikilinks => 1, ); my $html = $m->markdown( $text ); =head1 DESCRIPTION Markdown is a text-to-HTML filter; it translates an easy-to-read / easy-to-write structured text format into HTML. Markdown's text format is most similar to that of plain text email, and supports features such as headers, *emphasis*, code blocks, blockquotes, and links. Markdown's syntax is designed not as a generic markup language, but specifically to serve as a front-end to (X)HTML. You can use span-level HTML tags anywhere in a Markdown document, and you can use block level HTML tags (C<<
    >>, C<< >> etc.). Note that by default Markdown isn't interpreted in HTML block-level elements, unless you add a C attribute to the element. See L for details. This module implements the MultiMarkdown markdown syntax extensions from: http://fletcherpenney.net/multimarkdown/ =head1 SYNTAX For more information about (original) Markdown's syntax, see: http://daringfireball.net/projects/markdown/ This module implements MultiMarkdown, which is an extension to Markdown.. The extension is documented at: http://fletcherpenney.net/multimarkdown/ and borrows from php-markdown, which lives at: http://michelf.com/projects/php-markdown/extra/ This documentation is going to be moved/copied into this module for clearer reading in a future release.. =head1 OPTIONS MultiMarkdown supports a number of options to it's processor which control the behaviour of the output document. These options can be supplied to the constructor, on in a hash with the individual calls to the markdown method. See the synopsis for examples of both of the above styles. The options for the processor are: =over =item use_metadata Controls the metadata options below. =item strip_metadata If true, any metadata in the input document is removed from the output document (note - does not take effect in complete document format). =item empty element suffix This option can be used to generate normal HTML output. By default, it is ' />', which is xHTML, change to '>' for normal HTML. =item img_ids Controls if tags generated have an id attribute. Defaults to true. Turn off for compatibility with the original markdown. =item heading_ids Controls if tags generated have an id attribute. Defaults to true. Turn off for compatibility with the original markdown. =item bibliography_title The title of the generated bibliography, defaults to 'Bibliography'. =item tab_width Controls indent width in the generated markup, defaults to 4 =item disable_tables If true, this disables the MultiMarkdown table handling. =item disable_footnotes If true, this disables the MultiMarkdown footnotes handling. =item disable_bibliography If true, this disables the MultiMarkdown bibliography/citation handling. =item disable_definition_lists If true, this disables the MultiMarkdown definition list handling. =back A number of possible items of metadata can also be supplied as options. Note that if the use_metadata is true then the metadata in the document will overwrite the settings on command line. Metadata options supported are: =over =item document_format =item use_wikilinks =item base_url =back =head1 METADATA MultiMarkdown supports the concept of 'metadata', which allows you to specify a number of formatting options within the document itself. Metadata should be placed in the top few lines of a file, on value per line as colon separated key/value pairs. The metadata should be separated from the document with a blank line. Most metadata keys are also supported as options to the constructor, or options to the markdown method itself. (Note, as metadata, keys contain space, whereas options the keys are underscore separated.) You can attach arbitrary metadata to a document, which is output in HTML tags if unknown, see t/11document_format.t for more info. A list of 'known' metadata keys, and their effects are listed below: =over =item document format If set to 'complete', MultiMarkdown will render an entire xHTML page, otherwise it will render a document fragment =over =item css Sets a CSS file for the file, if in 'complete' document format. =item title Sets the page title, if in 'complete' document format. =back =item use wikilinks If set to '1' or 'on', causes links that are WikiWords to automatically be processed into links. =item base url This is the base URL for referencing wiki pages. In this is not supplied, all wiki links are relative. =back =head1 METHODS =head2 new A simple constructor, see the SYNTAX and OPTIONS sections for more information. =cut sub new { my ($class, %p) = @_; # Default metadata to 1 $p{use_metadata} = 1 unless exists $p{use_metadata}; # Squash value to [01] $p{use_metadata} = $p{use_metadata} ? 1 : 0; $p{base_url} ||= ''; # This is the base url to be used for WikiLinks $p{tab_width} = 4 unless (defined $p{tab_width} and $p{tab_width} =~ m/^\d+$/); $p{document_format} ||= ''; $p{empty_element_suffix} ||= ' />'; # Change to ">" for HTML output #$p{heading_ids} = defined $p{heading_ids} ? $p{heading_ids} : 1; # For use with WikiWords and [[Wiki Links]] # NOTE: You can use \WikiWord to prevent a WikiWord from being treated as a link $p{use_wikilinks} = $p{use_wikilinks} ? 1 : 0; $p{heading_ids} = defined $p{heading_ids} ? $p{heading_ids} : 1; $p{img_ids} = defined $p{img_ids} ? $p{img_ids} : 1; $p{bibliography_title} ||= 'Bibliography'; # FIXME - Test and document, can also be in metadata! my $self = { params => \%p }; bless $self, ref($class) || $class; return $self; } =head2 markdown The main function as far as the outside world is concerned. See the SYNOPSIS for details on use. =cut sub markdown { my ( $self, $text, $options ) = @_; # Detect functional mode, and create an instance for this run.. unless (ref $self) { if ( $self ne __PACKAGE__ ) { my $ob = __PACKAGE__->new(); # $self is text, $text is options return $ob->markdown($self, $text); } else { croak('Calling ' . $self . '->markdown (as a class method) is not supported.'); } } $options ||= {}; %$self = (%{ $self->{params} }, %$options, params => $self->{params}); $self->_CleanUpRunData($options); return $self->_Markdown($text); } sub _CleanUpRunData { my ($self, $options) = @_; # Clear the global hashes. If we don't clear these, you get conflicts # from other articles when generating a page which contains more than # one article (e.g. an index page that shows the N most recent # articles): $self->{_crossrefs} = {}; $self->{_footnotes} = {}; $self->{_references} = {}; $self->{_used_footnotes} = []; # Why do we need 2 data structures for footnotes? FIXME $self->{_used_references} = []; # Ditto for references $self->{_citation_counter} = 0; $self->{_metadata} = {}; $self->{_attributes} = {}; # Used for extra attributes on links / images. $self->SUPER::_CleanUpRunData($options); } sub _Markdown { # # Main function. The order in which other subs are called here is # essential. Link and image substitutions need to happen before # _EscapeSpecialChars(), so that any *'s or _'s in the # and tags get encoded. # # Can't think of any good way to make this inherit from the Markdown version as ordering is so important, so I've left it. my ($self, $text) = @_; $text = $self->_CleanUpDoc($text); # MMD only. Strip out MetaData $text = $self->_ParseMetaData($text) if ($self->{use_metadata} || $self->{strip_metadata}); # Turn block-level HTML blocks into hash entries $text = $self->_HashHTMLBlocks($text, {interpret_markdown_on_attribute => 1}); $text = $self->_StripLinkDefinitions($text); # MMD only $text = $self->_StripMarkdownReferences($text); $text = $self->_RunBlockGamut($text, {wrap_in_p_tags => 1}); # MMD Only $text = $self->_DoMarkdownCitations($text) unless $self->{disable_bibliography}; $text = $self->_DoFootnotes($text) unless $self->{disable_footnotes}; $text = $self->_UnescapeSpecialChars($text); # MMD Only # This must follow _UnescapeSpecialChars $text = $self->_UnescapeWikiWords($text); $text = $self->_FixFootnoteParagraphs($text) unless $self->{disable_footnotes}; # TODO: remove. Doesn't make any difference to test suite pass/failure $text .= $self->_PrintFootnotes() unless $self->{disable_footnotes}; $text .= $self->_PrintMarkdownBibliography() unless $self->{disable_bibliography}; $text = $self->_ConvertCopyright($text); # MMD Only if (lc($self->{document_format}) =~ /^complete\s*$/) { return $self->_xhtmlMetaData() . "\n" . $text . "\n\n"; } else { return $self->_textMetaData() . $text . "\n"; } } # # Routines which are overridden for slightly different behaviour in MultiMarkdown # # Delegate to super class, then do wiki links sub _RunSpanGamut { my ($self, $text) = @_; $text = $self->SUPER::_RunSpanGamut($text); # Process WikiWords if ($self->_UseWikiLinks()) { $text = $self->_DoWikiLinks($text); # And then reprocess anchors and images # FIXME - This is needed exactly why? $text = $self->_DoImages($text); $text = $self->_DoAnchors($text); } return $text; } # Don't do Wiki Links in Headers, otherwise delegate to super class # Do tables stright after headers sub _DoHeaders { my ($self, $text) = @_; local $self->{use_wikilinks} = 0; $text = $self->SUPER::_DoHeaders($text); # Do tables to populate the table id's for cross-refs # (but after headers as the tables can contain cross-refs to other things, so we want the header cross-refs) $text = $self->_DoTables($text); } sub _DoLists { my ($self, $text) = @_; $text = $self->_DoDefinitionLists($text) unless $self->{disable_definition_lists}; $self->SUPER::_DoLists($text); } sub _DoDefinitionLists { my ($self, $text) = @_; # Uses the syntax proposed by Michel Fortin in PHP Markdown Extra my $less_than_tab = $self->{tab_width} -1; my $line_start = qr{ [ ]{0,$less_than_tab} }mx; my $term = qr{ $line_start [^:\s][^\n]*\n }sx; my $definition = qr{ \n?[ ]{0,$less_than_tab} \:[ \t]+(.*?)\n ((?=\n?\:)|\n|\Z) # Lookahead for next definition, two returns, # or the end of the document }sx; my $definition_block = qr{ ((?:$term)+) # $1 = one or more terms ((?:$definition)+) # $2 = by one or more definitions }sx; my $definition_list = qr{ (?:$definition_block\n*)+ # One ore more definition blocks }sx; $text =~ s{ ($definition_list) # $1 = the whole list }{ my $list = $1; my $result = $1; $list =~ s{ (?:$definition_block)\n* }{ my $terms = $1; my $defs = $2; $terms =~ s{ [ ]{0,$less_than_tab} (.*) \s* }{ my $term = $1; my $result = ""; $term =~ s/^\s*(.*?)\s*$/$1/; if ($term !~ /^\s*$/){ $result = "
    " . $self->_RunSpanGamut($1) . "
    \n"; } $result; }xmge; $defs =~ s{ $definition }{ my $def = $1 . "\n"; $def =~ s/^[ ]{0,$self->{tab_width}}//gm; "
    \n" . $self->_RunBlockGamut($def) . "\n
    \n"; }xsge; $terms . $defs . "\n"; }xsge; "
    \n" . $list . "
    \n\n"; }xsge; return $text } # Generating headers automatically generates X-refs in MultiMarkdown (always) # Also, by default, you get id attributes added to your headers, you can turn this # part of the MultiMarkdown behaviour off with the heading_ids flag. sub _GenerateHeader { my ($self, $level, $id) = @_; my $label = $self->{heading_ids} ? $self->_Header2Label($id) : ''; my $header = $self->_RunSpanGamut($id); if ($label ne '') { $self->{_crossrefs}{$label} = "#$label"; $self->{_titles}{$label} = $header; $label = qq{ id="$label"}; } return "$header\n\n"; } # Protect Wiki Links in Code Blocks (if wiki links are turned on), then delegate to super class. sub _EncodeCode { my ($self, $text) = @_; if ($self->_UseWikiLinks()) { $text =~ s/([A-Z]+[a-z\x80-\xff]+[A-Z][A-Za-z\x80-\xff]*)/\\$1/gx; } return $self->SUPER::_EncodeCode($text); } # Full function pulled out of Text::Markdown as MultiMarkdown supports supplying extra 'attributes' with links and # images which are then pushed back into the generated HTML, and this needs a different regex. It should be possible # to extract the just the regex from Text::Markdown, and use that here, but I haven't done so yet. # Strip footnote definitions at the same time as stripping link definitions. # Also extract images and then replace them straight back in (code smell!) to be able to cross reference images sub _StripLinkDefinitions { # # Strips link definitions from text, stores the URLs and titles in # hash references. # my ($self, $text) = @_; $text = $self->_StripFootnoteDefinitions($text) unless $self->{disable_footnotes}; my $less_than_tab = $self->{tab_width} - 1; # Link defs are in the form: ^[id]: url "optional title" # FIXME - document attributes here. while ($text =~ s{ # Pattern altered for MultiMarkdown # in order to not match citations or footnotes ^[ ]{0,$less_than_tab}\[([^#^].*)\]: # id = $1 [ \t]* \n? # maybe *one* newline [ \t]* ? # url = $2 [ \t]* \n? # maybe one newline [ \t]* (?: (?<=\s) # lookbehind for whitespace ["(] (.+?) # title = $3 [")] [ \t]* )? # title is optional # MultiMarkdown addition for attribute support \n? ( # Attributes = $4 (?<=\s) # lookbehind for whitespace (([ \t]*\n)?[ \t]*((\S+=\S+)|(\S+=".*?")))* )? [ \t]* # /addition (?:\n+|\Z) } {}mx) { $self->{_urls}{lc $1} = $self->_EncodeAmpsAndAngles( $2 ); # Link IDs are case-insensitive if ($3) { $self->{_titles}{lc $1} = $3; $self->{_titles}{lc $1} =~ s/"/"/g; } # MultiMarkdown addition " if ($4) { $self->{_attributes}{lc $1} = $4; } # /addition } $text = $self->_GenerateImageCrossRefs($text); return $text; } # Add the extra cross-references to headers that MultiMarkdown supports, and also # the additional link attributes. sub _GenerateAnchor { # FIXME - Fugly, change to named params? my ($self, $whole_match, $link_text, $link_id, $url, $title, $attributes) = @_; # Allow automatic cross-references to headers if (defined $link_id) { my $label = $self->_Header2Label($link_id); if (defined $self->{_crossrefs}{$label}) { $url ||= $self->{_crossrefs}{$label}; } if ( defined $self->{_titles}{$label} ) { $title ||= $self->{_titles}{$label}; } $attributes ||= $self->_DoAttributes($label); } return $self->SUPER::_GenerateAnchor($whole_match, $link_text, $link_id, $url, $title, $attributes); } # Add the extra cross-references to images that MultiMarkdown supports, and also # the additional attributes. sub _GenerateImage { # FIXME - Fugly, change to named params? my ($self, $whole_match, $alt_text, $link_id, $url, $title, $attributes) = @_; if (defined $alt_text && length $alt_text) { my $label = $self->_Header2Label($alt_text); $self->{_crossrefs}{$label} = "#$label"; $attributes .= $self->{img_ids} ? qq{ id="$label"} : ''; } $attributes .= $self->_DoAttributes($link_id) if defined $link_id; $self->SUPER::_GenerateImage($whole_match, $alt_text, $link_id, $url, $title, $attributes); } # # MultiMarkdown specific routines # # FIXME - This is really really ugly! sub _ParseMetaData { my ($self, $text) = @_; my $clean_text = ""; my ($inMetaData, $currentKey) = (1, ''); foreach my $line ( split /\n/, $text ) { $line =~ /^\s*$/ and $inMetaData = 0 and $clean_text .= $line and next; if ($inMetaData) { next unless $self->{use_metadata}; # We can come in here as use_metadata => 0, strip_metadata => 1 if ($line =~ /^([a-zA-Z0-9][0-9a-zA-Z _-]+?):\s*(.*)$/ ) { $currentKey = $1; $currentKey =~ s/ / /g; $self->{_metadata}{$currentKey} = defined $2 ? $2 : ''; if (lc($currentKey) eq "format") { $self->{document_format} = $self->{_metadata}{$currentKey}; } if (lc($currentKey) eq "base url") { $self->{base_url} = $self->{_metadata}{$currentKey}; } if (lc($currentKey) eq "bibliography title") { $self->{bibliography_title} = $self->{_metadata}{$currentKey}; $self->{bibliography_title} =~ s/\s*$//; } } else { if ($currentKey eq "") { # No metadata present $clean_text .= "$line\n"; $inMetaData = 0; next; } if ($line =~ /^\s*(.+)$/ ) { $self->{_metadata}{$currentKey} .= "\n$1"; } } } else { $clean_text .= "$line\n"; } } # Recheck for leading blank lines $clean_text =~ s/^\n+//s; return $clean_text; } # FIXME - This is really ugly, why do we match stuff and substitute it with the thing we just matched? sub _GenerateImageCrossRefs { my ($self, $text) = @_; # # First, handle reference-style labeled images: ![alt text][id] # $text =~ s{ ( # wrap whole match in $1 !\[ (.*?) # alt text = $2 \] [ ]? # one optional space (?:\n[ ]*)? # one optional newline followed by spaces \[ (.*?) # id = $3 \] ) }{ my $whole_match = $1; my $alt_text = $2; my $link_id = lc $3; if ($link_id eq "") { $link_id = lc $alt_text; # for shortcut links like ![this][]. } $alt_text =~ s/"/"/g; if (defined $self->{_urls}{$link_id}) { my $label = $self->_Header2Label($alt_text); $self->{_crossrefs}{$label} = "#$label"; } $whole_match; }xsge; # # Next, handle inline images: ![alt text](url "optional title") # Don't forget: encode * and _ $text =~ s{ ( # wrap whole match in $1 !\[ (.*?) # alt text = $2 \] \( # literal paren [ \t]* ? # src url = $3 [ \t]* ( # $4 (['"]) # quote char = $5 (.*?) # title = $6 \5 # matching quote [ \t]* )? # title is optional \) ) }{ my $result; my $whole_match = $1; my $alt_text = $2; $alt_text =~ s/"/"/g; my $label = $self->_Header2Label($alt_text); $self->{_crossrefs}{$label} = "#$label"; $whole_match; }xsge; return $text; } sub _StripFootnoteDefinitions { my ($self, $text) = @_; my $less_than_tab = $self->{tab_width} - 1; while ($text =~ s{ \n\[\^([^\n]+?)\]\:[ \t]*# id = $1 \n? (.*?)\n{1,2} # end at new paragraph ((?=\n[ ]{0,$less_than_tab}\S)|\Z) # Lookahead for non-space at line-start, or end of doc } {\n}sx) { my $id = $1; my $footnote = "$2\n"; $footnote =~ s/^[ ]{0,$self->{tab_width}}//gm; $self->{_footnotes}{$self->_Id2Footnote($id)} = $footnote; } return $text; } sub _DoFootnotes { my ($self, $text) = @_; return '' unless length $text; # First, run routines that get skipped in footnotes foreach my $label (sort keys %{ $self->{_footnotes} }) { my $footnote = $self->_RunBlockGamut($self->{_footnotes}{$label}, {wrap_in_p_tags => 1}); $footnote = $self->_UnescapeSpecialChars($footnote); $footnote = $self->_DoMarkdownCitations($footnote); $self->{_footnotes}{$label} = $footnote; } my $footnote_counter = 0; $text =~ s{ \[\^(.*?)\] # id = $1 }{ my $result = ''; my $id = $self->_Id2Footnote($1); if (defined $self->{_footnotes}{$id} ) { $footnote_counter++; if ($self->{_footnotes}{$id} =~ /^glossary:/i) { $result = qq{
    $footnote_counter}; } else { $result = qq{$footnote_counter}; } push (@{ $self->{_used_footnotes} }, $id); } $result; }xsge; return $text; } # TODO: remove. Doesn't make any difference to test suite pass/failure sub _FixFootnoteParagraphs { my ($self, $text) = @_; $text =~ s(^

    )()gm; return $text; } sub _PrintFootnotes { my ($self) = @_; my $footnote_counter = 0; my $result; foreach my $id (@{ $self->{_used_footnotes} }) { $footnote_counter++; my $footnote = $self->{_footnotes}{$id}; $footnote =~ s/(<\/(p(re)?|ol|ul)>)$//; my $footnote_closing_tag = $1; $footnote_closing_tag = '' if !defined $footnote_closing_tag; if ($footnote =~ s/^glossary:\s*//i) { # Add some formatting for glossary entries $footnote =~ s{ ^(.*?) # $1 = term \s* (?:\(([^\(\)]*)\)[^\n]*)? # $2 = optional sort key \n }{ my $glossary = qq{$1}; if ($2) { $glossary.= qq{}; }; $glossary . q{:

    }; }egsx; $result .= qq{

  • $footnote ↩$footnote_closing_tag
  • \n\n}; } else { $result .= qq{
  • $footnote ↩$footnote_closing_tag
  • \n\n}; } } if ($footnote_counter > 0) { $result = qq[\n\n
    \n{empty_element_suffix}\n
      \n\n] . $result . "
    \n
    "; } else { $result = ""; } return $result; } sub _Header2Label { my ($self, $header) = @_; my $label = lc $header; $label =~ s/[^A-Za-z0-9:_.-]//g; # Strip illegal characters while ($label =~ s/^[^A-Za-z]//g) {}; # Strip illegal leading characters return $label; } sub _Id2Footnote { # Since we prepend "fn:", we can allow leading digits in footnotes my ($self, $id) = @_; my $footnote = lc $id; $footnote =~ s/[^A-Za-z0-9:_.-]//g; # Strip illegal characters return $footnote; } sub _xhtmlMetaData { my ($self) = @_; # FIXME: Should not assume encoding my $result; # FIXME: This breaks some things in IE 6- = qq{\n}; # This screws up xsltproc - make sure to use `-nonet -novalid` if you # have difficulty $result .= qq{\n}; $result.= "\n\t\n"; foreach my $key (sort keys %{$self->{_metadata}} ) { if (lc($key) eq "title") { $result.= "\t\t$self->{_metadata}{$key}\n"; } elsif (lc($key) eq "css") { $result.= qq[\t\t{empty_element_suffix}\n]; } elsif( lc($key) eq "xhtml header") { $result .= qq[\t\t$self->{_metadata}{$key}\n] } else { $result.= qq[\t\t{empty_element_suffix}\n]; } } $result.= "\t\n"; return $result; } sub _textMetaData { my ($self) = @_; my $result = ""; return $result if $self->{strip_metadata}; foreach my $key (sort keys %{$self->{_metadata}} ) { $result .= "$key: $self->{_metadata}{$key}\n"; } $result =~ s/\s*\n/{empty_element_suffix}\n/g; if ($result ne "") { $result.= "\n"; } return $result; } sub _UseWikiLinks { my ($self) = @_; return 1 if $self->{use_wikilinks}; my ($k) = grep { /use wikilinks/i } keys %{$self->{_metadata}}; return unless $k; return 1 if $self->{_metadata}{$k}; return; } sub _CreateWikiLink { my ($self, $title) = @_; my $id = $title; $id =~ s/ /_/g; $id =~ s/__+/_/g; $id =~ s/^_//g; $id =~ s/_$//; $title =~ s/_/ /g; return "[$title](" . $self->{base_url} . "$id)"; } sub _DoWikiLinks { my ($self, $text) = @_; my $WikiWord = '[A-Z]+[a-z\x80-\xff]+[A-Z][A-Za-z\x80-\xff]*'; my $FreeLinkPattern = "([-,.()' _0-9A-Za-z\x80-\xff]+)"; if ($self->_UseWikiLinks()) { # FreeLinks $text =~ s{ \[\[($FreeLinkPattern)\]\] }{ my $label = $1; $label =~ s{ ([\s\>])($WikiWord) }{ $1 ."\\" . $2 }xsge; $self->_CreateWikiLink($label) }xsge; # WikiWords $text =~ s{ ([\s])($WikiWord) }{ $1 . $self->_CreateWikiLink($2) }xsge; # Catch WikiWords at beginning of text $text =~ s{^($WikiWord) }{ $self->_CreateWikiLink($1) }xse; } return $text; } sub _UnescapeWikiWords { my ($self, $text) = @_; my $WikiWord = '[A-Z]+[a-z\x80-\xff]+[A-Z][A-Za-z\x80-\xff]*'; # Unescape escaped WikiWords $text =~ s/(?<=\B)\\($WikiWord)/$1/g; return $text; } sub _DoTables { my ($self, $text) = @_; return $text if $self->{disable_tables}; my $less_than_tab = $self->{tab_width} - 1; # Algorithm inspired by PHP Markdown Extra's # # Reusable regexp's to match table my $line_start = qr{ [ ]{0,$less_than_tab} }mx; my $table_row = qr{ [^\n]*?\|[^\n]*?\n }mx; my $first_row = qr{ $line_start \S+.*?\|.*?\n }mx; my $table_rows = qr{ (\n?$table_row) }mx; my $table_caption = qr{ $line_start \[.*?\][ \t]*\n }mx; my $table_divider = qr{ $line_start [\|\-\:\.][ \-\|\:\.]* \| [ \-\|\:\.]* }mx; my $whole_table = qr{ ($table_caption)? # Optional caption ($first_row # First line must start at beginning ($table_row)*?)? # Header Rows $table_divider # Divider/Alignment definitions $table_rows+ # Body Rows ($table_caption)? # Optional caption }mx; # Find whole tables, then break them up and process them $text =~ s{ ^($whole_table) # Whole table in $1 (\n|\Z) # End of file or 2 blank lines }{ my $table = $1; my $result = "
    \n"; my @alignments; my $use_row_header = 0; # Add Caption, if present if ($table =~ s/^$line_start\[\s*(.*?)\s*\](\[\s*(.*?)\s*\])?[ \t]*$//m) { if (defined $3) { # add caption id to cross-ref list my $table_id = $self->_Header2Label($3); $result .= qq{\n"; $self->{_crossrefs}{$table_id} = "#$table_id"; $self->{_titles}{$table_id} = "$1"; } else { $result .= "\n"; } } # If a second "caption" is present, treat it as a summary # However, this is not valid in XHTML 1.0 Strict # But maybe in future # A summary might be longer than one line if ($table =~ s/\n$line_start\[\s*(.*?)\s*\][ \t]*\n/\n/s) { # $result .= "" . $self->_RunSpanGamut($1) . "\n"; } # Now, divide table into header, alignment, and body # First, add leading \n in case there is no header $table = "\n" . $table; # Need to be greedy $table =~ s/\n($table_divider)\n(($table_rows)+)//s; my $alignment_string = $1; my $body = $2; # Process column alignment while ($alignment_string =~ /\|?\s*(.+?)\s*(\||\Z)/gs) { my $cell = $self->_RunSpanGamut($1); if ($cell =~ /\:$/) { if ($cell =~ /^\:/) { $result .= qq[{empty_element_suffix}\n]; push(@alignments,"center"); } else { $result .= qq[{empty_element_suffix}\n]; push(@alignments,"right"); } } else { if ($cell =~ /^\:/) { $result .= qq[{empty_element_suffix}\n]; push(@alignments,"left"); } else { if (($cell =~ /^\./) || ($cell =~ /\.$/)) { $result .= qq[{empty_element_suffix}\n]; push(@alignments,"char"); } else { $result .= "{empty_element_suffix}\n"; push(@alignments,""); } } } } # Process headers $table =~ s/^\n+//s; $result .= "\n"; # Strip blank lines $table =~ s/\n[ \t]*\n/\n/g; foreach my $line (split(/\n/, $table)) { # process each line (row) in table $result .= "\n"; my $count=0; while ($line =~ /\|?\s*([^\|]+?)\s*(\|+|\Z)/gs) { # process contents of each cell my $cell = $self->_RunSpanGamut($1); my $ending = $2; my $colspan = ""; if ($ending =~ s/^\s*(\|{2,})\s*$/$1/) { $colspan = " colspan=\"" . length($ending) . "\""; } $result .= "\t$cell\n"; if ( $count == 0) { if ($cell =~ /^\s*$/) { $use_row_header = 1; } else { $use_row_header = 0; } } $count++; } $result .= "\n"; } # Process body $result .= "\n\n"; foreach my $line (split(/\n/, $body)) { # process each line (row) in table if ($line =~ /^\s*$/) { $result .= "\n\n\n"; next; } $result .= "\n"; my $count=0; while ($line =~ /\|?\s*([^\|]+?)\s*(\|+|\Z)/gs) { # process contents of each cell no warnings 'uninitialized'; my $cell = $self->_RunSpanGamut($1); my $ending = $2; my $colspan = ""; my $cell_type = "td"; if ($count == 0 && $use_row_header == 1) { $cell_type = "th"; } if ($ending =~ s/^\s*(\|{2,})\s*$/$1/) { $colspan = " colspan=\"" . length($ending) . "\""; } if ($alignments[$count] !~ /^\s*$/) { $result .= "\t<$cell_type$colspan align=\"$alignments[$count]\">$cell\n"; } else { $result .= "\t<$cell_type$colspan>$cell\n"; } $count++; } $result .= "\n"; } $result .= "\n
    } . $self->_RunSpanGamut($1). "" . $self->_RunSpanGamut($1). "
    \n"; $result }egmx; my $table_body = qr{ ( # wrap whole match in $2 (.*?\|.*?)\n # wrap headers in $3 [ ]{0,$less_than_tab} ($table_divider) # alignment in $4 ( # wrap cells in $5 $table_rows ) ) }mx; return $text; } sub _DoAttributes { my ($self, $id) = @_; my $result = ""; if (defined $self->{_attributes}{$id}) { while ($self->{_attributes}{$id} =~ s/(\S+)="(.*?)"//) { $result .= qq{ $1="$2"}; } while ($self->{_attributes}{$id} =~ /(\S+)=(\S+)/g) { $result .= qq{ $1="$2"}; } } return $result; } sub _StripMarkdownReferences { my ($self, $text) = @_; my $less_than_tab = $self->{tab_width} - 1; while ($text =~ s{ \n\[\#(.+?)\]:[ \t]* # id = $1 \n? (.*?)\n{1,2} # end at new paragraph ((?=\n[ ]{0,$less_than_tab}\S)|\Z) # Lookahead for non-space at line-start, or end of doc } {\n}sx) { my $id = $1; my $reference = "$2\n"; $reference =~ s/^[ ]{0,$self->{tab_width}}//gm; $reference = $self->_RunBlockGamut($reference, {wrap_in_p_tags => 0}); $self->{_references}{$id} = $reference; } return $text; } sub _DoMarkdownCitations { my ($self, $text) = @_; $text =~ s{ \[([^\[]*?)\] # citation text = $1 [ ]? # one optional space (?:\n[ ]*)? # one optional newline followed by spaces \[\#(.*?)\] # id = $2 }{ my $result; my $anchor_text = $1; my $id = $2; my $count; if (defined $self->{_references}{$id} ) { my $citation_counter=0; # See if citation has been used before foreach my $old_id (@{ $self->{_used_references} }) { $citation_counter++; $count = $citation_counter if ($old_id eq $id); } if (! defined $count) { $count = ++$self->{_citation_counter}; push (@{ $self->{_used_references} }, $id); } $result = qq[ ($count]; if ($anchor_text ne "") { $result .= qq[, $anchor_text]; } $result .= ")"; } else { # No reference exists $result = qq[ ($id]; if ($anchor_text ne "") { $result .= qq[, $anchor_text]; } $result .= ")"; } if ($self->_Header2Label($anchor_text) eq "notcited"){ $result = qq[]; } $result; }xsge; return $text; } sub _PrintMarkdownBibliography { my ($self) = @_; my $citation_counter = 0; my $result; foreach my $id (@{ $self->{_used_references} }) { $citation_counter++; $result .= qq|

    [$citation_counter] $self->{_references}{$id}

    \n\n|; } $result .= "
    "; if ($citation_counter > 0) { $result = qq[\n\n
    \n{empty_element_suffix}\n

    $self->{bibliography_title}

    \n\n] . $result; } else { $result = ""; } return $result; } 1; __END__ =head1 BUGS To file bug reports or feature requests please send email to: bug-Text-Markdown@rt.cpan.org Please include with your report: (1) the example input; (2) the output you expected; (3) the output Markdown actually produced. =head1 VERSION HISTORY See the Changes file for detailed release notes for this version. =head1 AUTHOR John Gruber http://daringfireball.net/ PHP port and other contributions by Michel Fortin http://michelf.com/ MultiMarkdown changes by Fletcher Penney http://fletcher.freeshell.org/ CPAN Module Text::MultiMarkdown (based on Text::Markdown by Sebastian Riedel) originally by Darren Kulp (http://kulp.ch/) This module is maintained by: Tomas Doran http://www.bobtfish.net/ =head1 THIS DISTRIBUTION Please note that this distribution is a fork of Fletcher Penny's MultiMarkdown project, and it *is not* in any way blessed by him. Whilst this code aims to be compatible with the original MultiMarkdown (and incorporates and passes the MultiMarkdown test suite) whilst fixing a number of bugs in the original - there may be differences between the behaviour of this module and MultiMarkdown. If you find any differences where you believe Text::MultiMarkdown behaves contrary to the MultiMarkdown spec, please report them as bugs. =head1 SOURCE CODE You can find the source code repository for L and L on GitHub at . =head1 COPYRIGHT AND LICENSE Original Code Copyright (c) 2003-2004 John Gruber All rights reserved. MultiMarkdown changes Copyright (c) 2005-2006 Fletcher T. Penney All rights reserved. Text::MultiMarkdown changes Copyright (c) 2006-2009 Darren Kulp and Tomas Doran Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name "Markdown" nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. =cut Text-MultiMarkdown-1.000034/License.text0000644000076500000240000000274411233534212016336 0ustar t0mstaffCopyright (c) 2004, John Gruber All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name "Markdown" nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. Text-MultiMarkdown-1.000034/Makefile.PL0000644000076500000240000000164611351252564016030 0ustar t0mstaff# Load the Module::Install bundled in ./inc/ use inc::Module::Install; # Define metadata name 'Text-MultiMarkdown'; author 'Tomas Doran '; license 'bsd'; all_from 'lib/Text/MultiMarkdown.pm'; resources repository => 'http://github.com/bobtfish/text-multimarkdown/'; resources bugtracker => 'http://github.com/bobtfish/text-multimarkdown/issues'; # Specific dependencies perl_version '5.008'; requires 'Digest::MD5' => undef; requires 'Text::Markdown' => '1.0.26'; requires 'Encode' => undef; build_requires 'Test::More' => '0.42'; build_requires 'Test::Exception' => undef; build_requires 'List::MoreUtils' => undef; build_requires 'FindBin' => undef; if ($Module::Install::AUTHOR) { system("pod2text lib/Text/MultiMarkdown.pm > README") and die $!; } install_script 'script/MultiMarkdown.pl'; WriteAll; Text-MultiMarkdown-1.000034/MANIFEST0000644000076500000240000004007511555507702015211 0ustar t0mstaffChanges inc/Module/Install.pm inc/Module/Install/Base.pm inc/Module/Install/Can.pm inc/Module/Install/Fetch.pm inc/Module/Install/Makefile.pm inc/Module/Install/Metadata.pm inc/Module/Install/Scripts.pm inc/Module/Install/Win32.pm inc/Module/Install/WriteAll.pm lib/Text/MultiMarkdown.pm License.text Makefile.PL MANIFEST This list of files MANIFEST.skip META.yml README Readme.text script/MultiMarkdown.pl t/01use.t t/02pod.t t/03podcoverage.t t/03podspelling.t t/04markdown.t t/05options.t t/06wiki.t t/07fulldoc.t t/08exporter.t t/09base_url.t t/10use_metadata.t t/11docment_format.t t/12empty_element_suffix.t t/13multimarkdown-nometadata-firstpara.t t/14unicode.t t/16headingsinlists.t t/17olulreportedonlist.t t/18codespanextra.t t/20fulldocs-text-multimarkdown.t t/22fulldocs-multimarkdown-todo.t t/23afulldocs-multimarkdown.t t/24fulldocs-pythonmarkdown2-tm.t t/29fulldocs-maruku-unittest.t t/30disable_multimarkdown_features.t t/35commandlinemultimarkdown.t t/36footnotes.t t/37deflists.t t/docs-maruku-unittest/abbreviations.html t/docs-maruku-unittest/abbreviations.text t/docs-maruku-unittest/alt.html t/docs-maruku-unittest/alt.text t/docs-maruku-unittest/blank.html t/docs-maruku-unittest/blank.text t/docs-maruku-unittest/blanks_in_code.html t/docs-maruku-unittest/blanks_in_code.text t/docs-maruku-unittest/bug_def.html t/docs-maruku-unittest/bug_def.text t/docs-maruku-unittest/bug_table.html t/docs-maruku-unittest/bug_table.text t/docs-maruku-unittest/code.html t/docs-maruku-unittest/code.text t/docs-maruku-unittest/code2.html t/docs-maruku-unittest/code2.text t/docs-maruku-unittest/code3.html t/docs-maruku-unittest/code3.text t/docs-maruku-unittest/convert.pl t/docs-maruku-unittest/data_loss.html t/docs-maruku-unittest/data_loss.text t/docs-maruku-unittest/easy.html t/docs-maruku-unittest/easy.text t/docs-maruku-unittest/email.html t/docs-maruku-unittest/email.text t/docs-maruku-unittest/entities.html t/docs-maruku-unittest/entities.text t/docs-maruku-unittest/escaping.html t/docs-maruku-unittest/escaping.text t/docs-maruku-unittest/extra_dl.html t/docs-maruku-unittest/extra_dl.text t/docs-maruku-unittest/extra_header_id.html t/docs-maruku-unittest/extra_header_id.text t/docs-maruku-unittest/extra_table1.html t/docs-maruku-unittest/extra_table1.text t/docs-maruku-unittest/footnotes.html t/docs-maruku-unittest/footnotes.text t/docs-maruku-unittest/headers.html t/docs-maruku-unittest/headers.text t/docs-maruku-unittest/hex_entities.html t/docs-maruku-unittest/hex_entities.text t/docs-maruku-unittest/hrule.html t/docs-maruku-unittest/hrule.text t/docs-maruku-unittest/html2.html t/docs-maruku-unittest/html2.text t/docs-maruku-unittest/html3.html t/docs-maruku-unittest/html3.text t/docs-maruku-unittest/html4.html t/docs-maruku-unittest/html4.text t/docs-maruku-unittest/html5.html t/docs-maruku-unittest/html5.text t/docs-maruku-unittest/ie.html t/docs-maruku-unittest/ie.text t/docs-maruku-unittest/images.html t/docs-maruku-unittest/images.text t/docs-maruku-unittest/images2.html t/docs-maruku-unittest/images2.text t/docs-maruku-unittest/inline_html.html t/docs-maruku-unittest/inline_html.text t/docs-maruku-unittest/inline_html2.html t/docs-maruku-unittest/inline_html2.text t/docs-maruku-unittest/links.html t/docs-maruku-unittest/links.text t/docs-maruku-unittest/list1.html t/docs-maruku-unittest/list1.text t/docs-maruku-unittest/list2.html t/docs-maruku-unittest/list2.text t/docs-maruku-unittest/list3.html t/docs-maruku-unittest/list3.text t/docs-maruku-unittest/list4.html t/docs-maruku-unittest/list4.text t/docs-maruku-unittest/lists.html t/docs-maruku-unittest/lists.text t/docs-maruku-unittest/lists11.html t/docs-maruku-unittest/lists11.text t/docs-maruku-unittest/lists6.html t/docs-maruku-unittest/lists6.text t/docs-maruku-unittest/lists7.html t/docs-maruku-unittest/lists7.text t/docs-maruku-unittest/lists7b.html t/docs-maruku-unittest/lists7b.text t/docs-maruku-unittest/lists8.html t/docs-maruku-unittest/lists8.text t/docs-maruku-unittest/lists9.html t/docs-maruku-unittest/lists9.text t/docs-maruku-unittest/lists_after_paragraph.html t/docs-maruku-unittest/lists_after_paragraph.text t/docs-maruku-unittest/lists_ol.html t/docs-maruku-unittest/lists_ol.text t/docs-maruku-unittest/loss.html t/docs-maruku-unittest/loss.text t/docs-maruku-unittest/misc_sw.html t/docs-maruku-unittest/misc_sw.text t/docs-maruku-unittest/olist.html t/docs-maruku-unittest/olist.text t/docs-maruku-unittest/one.html t/docs-maruku-unittest/one.text t/docs-maruku-unittest/paragraph.html t/docs-maruku-unittest/paragraph.text t/docs-maruku-unittest/paragraphs.html t/docs-maruku-unittest/paragraphs.text t/docs-maruku-unittest/smartypants.html t/docs-maruku-unittest/smartypants.text t/docs-maruku-unittest/syntax_hl.html t/docs-maruku-unittest/syntax_hl.text t/docs-maruku-unittest/table_attributes.html t/docs-maruku-unittest/table_attributes.text t/docs-maruku-unittest/test.html t/docs-maruku-unittest/test.text t/docs-maruku-unittest/wrapping.html t/docs-maruku-unittest/wrapping.text t/docs-maruku-unittest/xml.html t/docs-maruku-unittest/xml.text t/docs-maruku-unittest/xml2.html t/docs-maruku-unittest/xml2.text t/docs-maruku-unittest/xml3.html t/docs-maruku-unittest/xml3.text t/docs-maruku-unittest/xml_instruction.html t/docs-maruku-unittest/xml_instruction.text t/docs-multimarkdown-todo/Amps_and_angle_encoding.html t/docs-multimarkdown-todo/Amps_and_angle_encoding.text t/docs-multimarkdown-todo/Email_Obfuscation.html t/docs-multimarkdown-todo/Email_Obfuscation.text t/docs-multimarkdown-todo/Tidyness.html t/docs-multimarkdown-todo/Tidyness.text t/docs-pythonmarkdown2-tm-cases-pass/auto_link.html t/docs-pythonmarkdown2-tm-cases-pass/auto_link.text t/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.html t/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.opts t/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.text t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.html t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.opts t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.text t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.html t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.opts t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.text t/docs-pythonmarkdown2-tm-cases-pass/blockquote.html t/docs-pythonmarkdown2-tm-cases-pass/blockquote.text t/docs-pythonmarkdown2-tm-cases-pass/blockquote_with_pre.html t/docs-pythonmarkdown2-tm-cases-pass/blockquote_with_pre.text t/docs-pythonmarkdown2-tm-cases-pass/code_block_with_tabs.html t/docs-pythonmarkdown2-tm-cases-pass/code_block_with_tabs.text t/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.html t/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.opts t/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.text t/docs-pythonmarkdown2-tm-cases-pass/codeblock.html t/docs-pythonmarkdown2-tm-cases-pass/codeblock.text t/docs-pythonmarkdown2-tm-cases-pass/codespans.html t/docs-pythonmarkdown2-tm-cases-pass/codespans.text t/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.html t/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.opts t/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.text t/docs-pythonmarkdown2-tm-cases-pass/emacs_head_vars.html t/docs-pythonmarkdown2-tm-cases-pass/emacs_head_vars.text t/docs-pythonmarkdown2-tm-cases-pass/emacs_tail_vars.html t/docs-pythonmarkdown2-tm-cases-pass/emacs_tail_vars.text t/docs-pythonmarkdown2-tm-cases-pass/emphasis.html t/docs-pythonmarkdown2-tm-cases-pass/emphasis.text t/docs-pythonmarkdown2-tm-cases-pass/escapes.html t/docs-pythonmarkdown2-tm-cases-pass/escapes.text t/docs-pythonmarkdown2-tm-cases-pass/footnotes.html t/docs-pythonmarkdown2-tm-cases-pass/footnotes.opts t/docs-pythonmarkdown2-tm-cases-pass/footnotes.text t/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.html t/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.opts t/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.text t/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.html t/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.opts t/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.text t/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.html t/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.opts t/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.text t/docs-pythonmarkdown2-tm-cases-pass/header.html t/docs-pythonmarkdown2-tm-cases-pass/header.text t/docs-pythonmarkdown2-tm-cases-pass/hr.html t/docs-pythonmarkdown2-tm-cases-pass/hr.text t/docs-pythonmarkdown2-tm-cases-pass/img_in_link.html t/docs-pythonmarkdown2-tm-cases-pass/img_in_link.text t/docs-pythonmarkdown2-tm-cases-pass/inline_links.html t/docs-pythonmarkdown2-tm-cases-pass/inline_links.text t/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.html t/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.opts t/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.text t/docs-pythonmarkdown2-tm-cases-pass/link_defn_alt_title_delims.html t/docs-pythonmarkdown2-tm-cases-pass/link_defn_alt_title_delims.text t/docs-pythonmarkdown2-tm-cases-pass/link_patterns.html t/docs-pythonmarkdown2-tm-cases-pass/link_patterns.opts t/docs-pythonmarkdown2-tm-cases-pass/link_patterns.text t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.html t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.opts t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.text t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.html t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.opts t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.text t/docs-pythonmarkdown2-tm-cases-pass/lists.html t/docs-pythonmarkdown2-tm-cases-pass/lists.text t/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.html t/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.opts t/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.text t/docs-pythonmarkdown2-tm-cases-pass/missing_link_defn.html t/docs-pythonmarkdown2-tm-cases-pass/missing_link_defn.text t/docs-pythonmarkdown2-tm-cases-pass/nested_list.html t/docs-pythonmarkdown2-tm-cases-pass/nested_list.text t/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.html t/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.opts t/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.text t/docs-pythonmarkdown2-tm-cases-pass/parens_in_url_4.html t/docs-pythonmarkdown2-tm-cases-pass/parens_in_url_4.text t/docs-pythonmarkdown2-tm-cases-pass/raw_html.html t/docs-pythonmarkdown2-tm-cases-pass/raw_html.text t/docs-pythonmarkdown2-tm-cases-pass/ref_links.html t/docs-pythonmarkdown2-tm-cases-pass/ref_links.text t/docs-pythonmarkdown2-tm-cases-pass/sublist-para.html t/docs-pythonmarkdown2-tm-cases-pass/sublist-para.text t/docs-pythonmarkdown2-tm-cases-pass/syntax_color.html t/docs-pythonmarkdown2-tm-cases-pass/syntax_color.opts t/docs-pythonmarkdown2-tm-cases-pass/syntax_color.text t/docs-pythonmarkdown2-tm-cases-pass/tricky_anchors.html t/docs-pythonmarkdown2-tm-cases-pass/tricky_anchors.text t/docs-pythonmarkdown2-tm-cases-pass/underline_in_autolink.html t/docs-pythonmarkdown2-tm-cases-pass/underline_in_autolink.text t/MultiMarkdown.mdtest/Backslash_escapes.text t/MultiMarkdown.mdtest/Backslash_escapes.xhtml t/MultiMarkdown.mdtest/Footnotes.text t/MultiMarkdown.mdtest/Footnotes.xhtml t/MultiMarkdown.mdtest/Inline_HTML_(Advanced).text t/MultiMarkdown.mdtest/Inline_HTML_(Advanced).xhtml t/MultiMarkdown.mdtest/Inline_HTML_(Simple).text t/MultiMarkdown.mdtest/Inline_HTML_(Simple).xhtml t/MultiMarkdown.mdtest/Inline_HTML_comments.text t/MultiMarkdown.mdtest/Inline_HTML_comments.xhtml t/MultiMarkdown.mdtest/Links_inline_style.text t/MultiMarkdown.mdtest/Links_inline_style.xhtml t/MultiMarkdown.mdtest/Links_reference_style.text t/MultiMarkdown.mdtest/Links_reference_style.xhtml t/MultiMarkdown.mdtest/Literal_quotes_in_titles.text t/MultiMarkdown.mdtest/Literal_quotes_in_titles.xhtml t/MultiMarkdown.mdtest/Nested_blockquotes.text t/MultiMarkdown.mdtest/Nested_blockquotes.xhtml t/MultiMarkdown.mdtest/Ordered_and_unordered_lists.text t/MultiMarkdown.mdtest/Ordered_and_unordered_lists.xhtml t/Text-MultiMarkdown.mdtest/Amps_and_angle_encoding.html t/Text-MultiMarkdown.mdtest/Amps_and_angle_encoding.text t/Text-MultiMarkdown.mdtest/Amps_and_angles_encoding-advanced.text t/Text-MultiMarkdown.mdtest/Amps_and_angles_encoding-advanced.xhtml t/Text-MultiMarkdown.mdtest/Auto_links.text t/Text-MultiMarkdown.mdtest/Auto_links.xhtml t/Text-MultiMarkdown.mdtest/Backslash_escapes.html t/Text-MultiMarkdown.mdtest/Backslash_escapes.text t/Text-MultiMarkdown.mdtest/Blockquotes_with_code_blocks.html t/Text-MultiMarkdown.mdtest/Blockquotes_with_code_blocks.text t/Text-MultiMarkdown.mdtest/Citations.text t/Text-MultiMarkdown.mdtest/Citations.xhtml t/Text-MultiMarkdown.mdtest/complex_escaping.text t/Text-MultiMarkdown.mdtest/complex_escaping.xhtml t/Text-MultiMarkdown.mdtest/Cross-References.text t/Text-MultiMarkdown.mdtest/Cross-References.xhtml t/Text-MultiMarkdown.mdtest/Emphasis.text t/Text-MultiMarkdown.mdtest/Emphasis.xhtml t/Text-MultiMarkdown.mdtest/Footnotes.text t/Text-MultiMarkdown.mdtest/Footnotes.xhtml t/Text-MultiMarkdown.mdtest/Hard-wrapped_paragraphs_with_list-like_lines.text t/Text-MultiMarkdown.mdtest/Hard-wrapped_paragraphs_with_list-like_lines.xhtml t/Text-MultiMarkdown.mdtest/Horizontal_rules.text t/Text-MultiMarkdown.mdtest/Horizontal_rules.xhtml t/Text-MultiMarkdown.mdtest/HTML-Comment-encoding.text t/Text-MultiMarkdown.mdtest/HTML-Comment-encoding.xhtml t/Text-MultiMarkdown.mdtest/Images.text t/Text-MultiMarkdown.mdtest/Images.xhtml t/Text-MultiMarkdown.mdtest/Inline_HTML_(Advanced).text t/Text-MultiMarkdown.mdtest/Inline_HTML_(Advanced).xhtml t/Text-MultiMarkdown.mdtest/Inline_HTML_(Simple).text t/Text-MultiMarkdown.mdtest/Inline_HTML_(Simple).xhtml t/Text-MultiMarkdown.mdtest/Inline_HTML_comments.text t/Text-MultiMarkdown.mdtest/Inline_HTML_comments.xhtml t/Text-MultiMarkdown.mdtest/Link_Attributes.text t/Text-MultiMarkdown.mdtest/Link_Attributes.xhtml t/Text-MultiMarkdown.mdtest/Links_brackets.text t/Text-MultiMarkdown.mdtest/Links_brackets.xhtml t/Text-MultiMarkdown.mdtest/Links_inline_style.text t/Text-MultiMarkdown.mdtest/Links_inline_style.xhtml t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_1.html t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_1.text t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_2.html t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_2.text t/Text-MultiMarkdown.mdtest/Links_reference_style.text t/Text-MultiMarkdown.mdtest/Links_reference_style.xhtml t/Text-MultiMarkdown.mdtest/Lists-multilevel-md5-edgecase.text t/Text-MultiMarkdown.mdtest/Lists-multilevel-md5-edgecase.xhtml t/Text-MultiMarkdown.mdtest/Lists.text t/Text-MultiMarkdown.mdtest/Lists.xhtml t/Text-MultiMarkdown.mdtest/Literal_quotes_in_titles.text t/Text-MultiMarkdown.mdtest/Literal_quotes_in_titles.xhtml t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Basics.text t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Basics.xhtml t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Syntax.text t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Syntax.xhtml t/Text-MultiMarkdown.mdtest/Metadata_(Complete).text t/Text-MultiMarkdown.mdtest/Metadata_(Complete).xhtml t/Text-MultiMarkdown.mdtest/Metadata_(Snippet).html t/Text-MultiMarkdown.mdtest/Metadata_(Snippet).text t/Text-MultiMarkdown.mdtest/Nested_blockquotes.text t/Text-MultiMarkdown.mdtest/Nested_blockquotes.xhtml t/Text-MultiMarkdown.mdtest/Ordered_and_unordered_lists.text t/Text-MultiMarkdown.mdtest/Ordered_and_unordered_lists.xhtml t/Text-MultiMarkdown.mdtest/PHP-ASP_tags.text t/Text-MultiMarkdown.mdtest/PHP-ASP_tags.xhtml t/Text-MultiMarkdown.mdtest/Special_Characters.text t/Text-MultiMarkdown.mdtest/Special_Characters.xhtml t/Text-MultiMarkdown.mdtest/Strong_and_em_together.text t/Text-MultiMarkdown.mdtest/Strong_and_em_together.xhtml t/Text-MultiMarkdown.mdtest/Tables.text t/Text-MultiMarkdown.mdtest/Tables.xhtml t/Text-MultiMarkdown.mdtest/Tabs.text t/Text-MultiMarkdown.mdtest/Tabs.xhtml t/Text-MultiMarkdown.mdtest/Warnings-rt34856.text t/Text-MultiMarkdown.mdtest/Warnings-rt34856.xhtml t/Text-MultiMarkdown.mdtest/Wiki_Features.text t/Text-MultiMarkdown.mdtest/Wiki_Features.xhtml t/Text-MultiMarkdown.mdtest/XHTML_Headers.text t/Text-MultiMarkdown.mdtest/XHTML_Headers.xhtml Todo Text-MultiMarkdown-1.000034/MANIFEST.skip0000644000076500000240000000123011233534212016131 0ustar t0mstaff^TODO$ ^Text-MultiMarkdown- # Avoid version control files. \bRCS\b \bCVS\b \bSCCS\b ,v$ \B\.svn\b \B\.git\b \b_darcs\b # Avoid Makemaker generated and utility files. \bMANIFEST\.bak \bMakefile$ \bblib/ \bMakeMaker-\d \bpm_to_blib\.ts$ \bpm_to_blib$ \bblibdirs\.ts$ # 6.18 through 6.25 generated this # Avoid Module::Build generated and utility files. \bBuild$ \b_build/ # Avoid temp and backup files. ~$ \.old$ \#$ \b\.# \.bak$ # Avoid Devel::Cover files. \bcover_db\b ### DEFAULT MANIFEST.SKIP ENDS HERE #### \.DS_Store$ \.sw.$ (\w+-)*(\w+)-\d\.\d+(?:\.tar\.gz)?$ \.t\.log$ \.gitignore$ MANIFEST.SKIP$ \.prove$ \.shipit$ # XS shit \.(?:bs|c|o)$ Text-MultiMarkdown-1.000034/META.yml0000644000076500000240000000144411555507677015341 0ustar t0mstaff--- abstract: 'Convert MultiMarkdown syntax to (X)HTML' author: - 'Tomas Doran ' build_requires: ExtUtils::MakeMaker: 6.42 FindBin: 0 List::MoreUtils: 0 Test::Exception: 0 Test::More: 0.42 configure_requires: ExtUtils::MakeMaker: 6.42 distribution_type: module generated_by: 'Module::Install version 0.91' license: bsd meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: Text-MultiMarkdown no_index: directory: - inc - t requires: Digest::MD5: 0 Encode: 0 Text::Markdown: 1.0.26 perl: 5.8.0 resources: bugtracker: http://github.com/bobtfish/text-multimarkdown/issues license: http://opensource.org/licenses/bsd-license.php repository: http://github.com/bobtfish/text-multimarkdown/ version: 1.000034 Text-MultiMarkdown-1.000034/README0000644000076500000240000002155511555507677014755 0ustar t0mstaffNAME Text::MultiMarkdown - Convert MultiMarkdown syntax to (X)HTML SYNOPSIS use Text::MultiMarkdown 'markdown'; my $html = markdown($text); use Text::MultiMarkdown 'markdown'; my $html = markdown( $text, { empty_element_suffix => '>', tab_width => 2, use_wikilinks => 1, } ); use Text::MultiMarkdown; my $m = Text::MultiMarkdown->new; my $html = $m->markdown($text); use Text::MultiMarkdown; my $m = Text::MultiMarkdown->new( empty_element_suffix => '>', tab_width => 2, use_wikilinks => 1, ); my $html = $m->markdown( $text ); DESCRIPTION Markdown is a text-to-HTML filter; it translates an easy-to-read / easy-to-write structured text format into HTML. Markdown's text format is most similar to that of plain text email, and supports features such as headers, *emphasis*, code blocks, blockquotes, and links. Markdown's syntax is designed not as a generic markup language, but specifically to serve as a front-end to (X)HTML. You can use span-level HTML tags anywhere in a Markdown document, and you can use block level HTML tags ("
    ", "" etc.). Note that by default Markdown isn't interpreted in HTML block-level elements, unless you add a "markdown=1"" attribute to the element. See Text::Markdown for details. This module implements the MultiMarkdown markdown syntax extensions from: http://fletcherpenney.net/multimarkdown/ SYNTAX For more information about (original) Markdown's syntax, see: http://daringfireball.net/projects/markdown/ This module implements MultiMarkdown, which is an extension to Markdown.. The extension is documented at: http://fletcherpenney.net/multimarkdown/ and borrows from php-markdown, which lives at: http://michelf.com/projects/php-markdown/extra/ This documentation is going to be moved/copied into this module for clearer reading in a future release.. OPTIONS MultiMarkdown supports a number of options to it's processor which control the behaviour of the output document. These options can be supplied to the constructor, on in a hash with the individual calls to the markdown method. See the synopsis for examples of both of the above styles. The options for the processor are: use_metadata Controls the metadata options below. strip_metadata If true, any metadata in the input document is removed from the output document (note - does not take effect in complete document format). empty element suffix This option can be used to generate normal HTML output. By default, it is ' />', which is xHTML, change to '>' for normal HTML. img_ids Controls if tags generated have an id attribute. Defaults to true. Turn off for compatibility with the original markdown. heading_ids Controls if tags generated have an id attribute. Defaults to true. Turn off for compatibility with the original markdown. bibliography_title The title of the generated bibliography, defaults to 'Bibliography'. tab_width Controls indent width in the generated markup, defaults to 4 disable_tables If true, this disables the MultiMarkdown table handling. disable_footnotes If true, this disables the MultiMarkdown footnotes handling. disable_bibliography If true, this disables the MultiMarkdown bibliography/citation handling. disable_definition_lists If true, this disables the MultiMarkdown definition list handling. A number of possible items of metadata can also be supplied as options. Note that if the use_metadata is true then the metadata in the document will overwrite the settings on command line. Metadata options supported are: document_format use_wikilinks base_url METADATA MultiMarkdown supports the concept of 'metadata', which allows you to specify a number of formatting options within the document itself. Metadata should be placed in the top few lines of a file, on value per line as colon separated key/value pairs. The metadata should be separated from the document with a blank line. Most metadata keys are also supported as options to the constructor, or options to the markdown method itself. (Note, as metadata, keys contain space, whereas options the keys are underscore separated.) You can attach arbitrary metadata to a document, which is output in HTML tags if unknown, see t/11document_format.t for more info. A list of 'known' metadata keys, and their effects are listed below: document format If set to 'complete', MultiMarkdown will render an entire xHTML page, otherwise it will render a document fragment css Sets a CSS file for the file, if in 'complete' document format. title Sets the page title, if in 'complete' document format. use wikilinks If set to '1' or 'on', causes links that are WikiWords to automatically be processed into links. base url This is the base URL for referencing wiki pages. In this is not supplied, all wiki links are relative. METHODS new A simple constructor, see the SYNTAX and OPTIONS sections for more information. markdown The main function as far as the outside world is concerned. See the SYNOPSIS for details on use. BUGS To file bug reports or feature requests please send email to: bug-Text-Markdown@rt.cpan.org Please include with your report: (1) the example input; (2) the output you expected; (3) the output Markdown actually produced. VERSION HISTORY See the Changes file for detailed release notes for this version. AUTHOR John Gruber http://daringfireball.net/ PHP port and other contributions by Michel Fortin http://michelf.com/ MultiMarkdown changes by Fletcher Penney http://fletcher.freeshell.org/ CPAN Module Text::MultiMarkdown (based on Text::Markdown by Sebastian Riedel) originally by Darren Kulp (http://kulp.ch/) This module is maintained by: Tomas Doran http://www.bobtfish.net/ THIS DISTRIBUTION Please note that this distribution is a fork of Fletcher Penny's MultiMarkdown project, and it *is not* in any way blessed by him. Whilst this code aims to be compatible with the original MultiMarkdown (and incorporates and passes the MultiMarkdown test suite) whilst fixing a number of bugs in the original - there may be differences between the behaviour of this module and MultiMarkdown. If you find any differences where you believe Text::MultiMarkdown behaves contrary to the MultiMarkdown spec, please report them as bugs. SOURCE CODE You can find the source code repository for Text::Markdown and Text::MultiMarkdown on GitHub at . COPYRIGHT AND LICENSE Original Code Copyright (c) 2003-2004 John Gruber All rights reserved. MultiMarkdown changes Copyright (c) 2005-2006 Fletcher T. Penney All rights reserved. Text::MultiMarkdown changes Copyright (c) 2006-2009 Darren Kulp and Tomas Doran Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name "Markdown" nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. Text-MultiMarkdown-1.000034/Readme.text0000644000076500000240000002607111233534212016150 0ustar t0mstaff# WARNING This Readme is from the original version of Markdown; not all of the information contained herein is applicable to Test::Markdown the CPAN module that includes this file. See the module's POD and the README file for more information. Markdown ======== Version 1.0.1 - Tue 14 Dec 2004 by John Gruber Introduction ------------ Markdown is a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML). Thus, "Markdown" is two things: a plain text markup syntax, and a software tool, written in Perl, that converts the plain text markup to HTML. Markdown works both as a Movable Type plug-in and as a standalone Perl script -- which means it can also be used as a text filter in BBEdit (or any other application that supporst filters written in Perl). Full documentation of Markdown's syntax and configuration options is available on the web: . (Note: this readme file is formatted in Markdown.) Installation and Requirements ----------------------------- Markdown requires Perl 5.6.0 or later. Welcome to the 21st Century. Markdown also requires the standard Perl library module `Digest::MD5`. ### Movable Type ### Markdown works with Movable Type version 2.6 or later (including MT 3.0 or later). 1. Copy the "Markdown.pl" file into your Movable Type "plugins" directory. The "plugins" directory should be in the same directory as "mt.cgi"; if the "plugins" directory doesn't already exist, use your FTP program to create it. Your installation should look like this: (mt home)/plugins/Markdown.pl 2. Once installed, Markdown will appear as an option in Movable Type's Text Formatting pop-up menu. This is selectable on a per-post basis. Markdown translates your posts to HTML when you publish; the posts themselves are stored in your MT database in Markdown format. 3. If you also install SmartyPants 1.5 (or later), Markdown will offer a second text formatting option: "Markdown with SmartyPants". This option is the same as the regular "Markdown" formatter, except that automatically uses SmartyPants to create typographically correct curly quotes, em-dashes, and ellipses. See the SmartyPants web page for more information: 4. To make Markdown (or "Markdown with SmartyPants") your default text formatting option for new posts, go to Weblog Config -> Preferences. Note that by default, Markdown produces XHTML output. To configure Markdown to produce HTML 4 output, see "Configuration", below. ### Blosxom ### Markdown works with Blosxom version 2.x. 1. Rename the "Markdown.pl" plug-in to "Markdown" (case is important). Movable Type requires plug-ins to have a ".pl" extension; Blosxom forbids it. 2. Copy the "Markdown" plug-in file to your Blosxom plug-ins folder. If you're not sure where your Blosxom plug-ins folder is, see the Blosxom documentation for information. 3. That's it. The entries in your weblog will now automatically be processed by Markdown. 4. If you'd like to apply Markdown formatting only to certain posts, rather than all of them, see Jason Clark's instructions for using Markdown in conjunction with Blosxom's Meta plugin: ### BBEdit ### Markdown works with BBEdit 6.1 or later on Mac OS X. (It also works with BBEdit 5.1 or later and MacPerl 5.6.1 on Mac OS 8.6 or later.) 1. Copy the "Markdown.pl" file to appropriate filters folder in your "BBEdit Support" folder. On Mac OS X, this should be: BBEdit Support/Unix Support/Unix Filters/ See the BBEdit documentation for more details on the location of these folders. You can rename "Markdown.pl" to whatever you wish. 2. That's it. To use Markdown, select some text in a BBEdit document, then choose Markdown from the Filters sub-menu in the "#!" menu, or the Filters floating palette Configuration ------------- By default, Markdown produces XHTML output for tags with empty elements. E.g.:
    Markdown can be configured to produce HTML-style tags; e.g.:
    ### Movable Type ### You need to use a special `MTMarkdownOptions` container tag in each Movable Type template where you want HTML 4-style output: ... put your entry content here ... The easiest way to use MTMarkdownOptions is probably to put the opening tag right after your `` tag, and the closing tag right before ``. To suppress Markdown processing in a particular template, i.e. to publish the raw Markdown-formatted text without translation into (X)HTML, set the `output` attribute to 'raw': ... put your entry content here ... ### Command-Line ### Use the `--html4tags` command-line switch to produce HTML output from a Unix-style command line. E.g.: % perl Markdown.pl --html4tags foo.text Type `perldoc Markdown.pl`, or read the POD documentation within the Markdown.pl source code for more information. Bugs ---- To file bug reports or feature requests please send email to: . Version History --------------- 1.0.1 (14 Dec 2004): + Changed the syntax rules for code blocks and spans. Previously, backslash escapes for special Markdown characters were processed everywhere other than within inline HTML tags. Now, the contents of code blocks and spans are no longer processed for backslash escapes. This means that code blocks and spans are now treated literally, with no special rules to worry about regarding backslashes. **NOTE**: This changes the syntax from all previous versions of Markdown. Code blocks and spans involving backslash characters will now generate different output than before. + Tweaked the rules for link definitions so that they must occur within three spaces of the left margin. Thus if you indent a link definition by four spaces or a tab, it will now be a code block. [a]: /url/ "Indented 3 spaces, this is a link def" [b]: /url/ "Indented 4 spaces, this is a code block" **IMPORTANT**: This may affect existing Markdown content if it contains link definitions indented by 4 or more spaces. + Added `>`, `+`, and `-` to the list of backslash-escapable characters. These should have been done when these characters were added as unordered list item markers. + Trailing spaces and tabs following HTML comments and `
    ` tags are now ignored. + Inline links using `<` and `>` URL delimiters weren't working: like [this]() + Added a bit of tolerance for trailing spaces and tabs after Markdown hr's. + Fixed bug where auto-links were being processed within code spans: like this: `` + Sort-of fixed a bug where lines in the middle of hard-wrapped paragraphs, which lines look like the start of a list item, would accidentally trigger the creation of a list. E.g. a paragraph that looked like this: I recommend upgrading to version 8. Oops, now this line is treated as a sub-list. This is fixed for top-level lists, but it can still happen for sub-lists. E.g., the following list item will not be parsed properly: + I recommend upgrading to version 8. Oops, now this line is treated as a sub-list. Given Markdown's list-creation rules, I'm not sure this can be fixed. + Standalone HTML comments are now handled; previously, they'd get wrapped in a spurious `

    ` tag. + Fix for horizontal rules preceded by 2 or 3 spaces. + `


    ` HTML tags in must occur within three spaces of left margin. (With 4 spaces or a tab, they should be code blocks, but weren't before this fix.) + Capitalized "With" in "Markdown With SmartyPants" for consistency with the same string label in SmartyPants.pl. (This fix is specific to the MT plug-in interface.) + Auto-linked email address can now optionally contain a 'mailto:' protocol. I.e. these are equivalent: + Fixed annoying bug where nested lists would wind up with spurious (and invalid) `

    ` tags. + You can now write empty links: [like this]() and they'll be turned into anchor tags with empty href attributes. This should have worked before, but didn't. + `***this***` and `___this___` are now turned into this Instead of this which isn't valid. (Thanks to Michel Fortin for the fix.) + Added a new substitution in `_EncodeCode()`: s/\$/$/g; This is only for the benefit of Blosxom users, because Blosxom (sometimes?) interpolates Perl scalars in your article bodies. + Fixed problem for links defined with urls that include parens, e.g.: [1]: http://sources.wikipedia.org/wiki/Middle_East_Policy_(Chomsky) "Chomsky" was being erroneously treated as the URL's title. + At some point during 1.0's beta cycle, I changed every sub's argument fetching from this idiom: my $text = shift; to: my $text = shift || return ''; The idea was to keep Markdown from doing any work in a sub if the input was empty. This introduced a bug, though: if the input to any function was the single-character string "0", it would also evaluate as false and return immediately. How silly. Now fixed. Donations --------- Donations to support Markdown's development are happily accepted. See: for details. Copyright and License --------------------- Copyright (c) 2003-2004 John Gruber All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name "Markdown" nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. This software is provided by the copyright holders and contributors "as is" and any express or implied warranties, including, but not limited to, the implied warranties of merchantability and fitness for a particular purpose are disclaimed. In no event shall the copyright owner or contributors be liable for any direct, indirect, incidental, special, exemplary, or consequential damages (including, but not limited to, procurement of substitute goods or services; loss of use, data, or profits; or business interruption) however caused and on any theory of liability, whether in contract, strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this software, even if advised of the possibility of such damage. Text-MultiMarkdown-1.000034/script/0000755000076500000240000000000011555510012015342 5ustar t0mstaffText-MultiMarkdown-1.000034/script/MultiMarkdown.pl0000644000076500000240000000700111233534212020473 0ustar t0mstaff#!/usr/bin/env perl use strict; use warnings; use Text::MultiMarkdown qw(markdown); =head1 NAME MultiMarkdown.pl - Convert MultiMarkdown syntax to (X)HTML =head1 DESCRIPTION This program is distributed as part of Perl's Text::MultiMarkdown module, illustrating sample usage. MultiMarkdown.pl can be invoked on any file containing MultiMarkdown-syntax, and will produce the corresponding (X)HTML on STDOUT: $ cat file.txt [MultiMarkdown][] *extends* the very well-known [Markdown][] syntax. [MultiMarkdown]: http://fletcherpenney.net/What_is_MultiMarkdown [Markdown]: http://daringfireball.net/projects/markdown/ $ multimarkdown file.txt

    MultiMarkdown extends the very well-known Markdown syntax.

    If no file is specified, it will expect its input from STDIN: $ echo "A **simple** test" | multimarkdown

    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 '---' | multimarkdown
    $ echo '---' | multimarkdown --html4tags
    =item help Shows this documentation =back =head1 AUTHOR Copyright 2004 John Gruber Copyright 2006 Fletcher Penny 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 Text::MultiMarkdown.pm'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 MultiMarkdown, version $Text::MultiMarkdown::VERSION.\n"; print "Copyright 2004 John Gruber\n"; print "Copyright 2006 Fletcher Penny\n"; print "Copyright 2008 Tomas Doran\n"; print "Parts contributed by several other people."; print "http://fletcherpenney.net/MultiMarkdown/\n\n"; exit 0; } if ($cli_opts{'shortversion'}) { # Just the version number string. print $Text::MultiMarkdown::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::MultiMarkdown->new(empty_element_suffix => '>'); } else { $m = Text::MultiMarkdown->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(); Text-MultiMarkdown-1.000034/t/0000755000076500000240000000000011555510013014302 5ustar t0mstaffText-MultiMarkdown-1.000034/t/01use.t0000644000076500000240000000012511233534212015422 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 1; use_ok('Text::MultiMarkdown'); Text-MultiMarkdown-1.000034/t/02pod.t0000644000076500000240000000033011233534212015407 0ustar t0mstaffuse strict; use warnings; use Test::More; eval "use Test::Pod 1.14"; plan skip_all => 'Test::Pod 1.14 required' if $@; plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; all_pod_files_ok(); Text-MultiMarkdown-1.000034/t/03podcoverage.t0000644000076500000240000000035711233534212017135 0ustar t0mstaffuse strict; use warnings; use Test::More; eval "use Test::Pod::Coverage 1.04"; plan skip_all => 'Test::Pod::Coverage 1.04 required' if $@; plan skip_all => 'set TEST_POD to enable this test' unless $ENV{TEST_POD}; all_pod_coverage_ok(); Text-MultiMarkdown-1.000034/t/03podspelling.t0000644000076500000240000000121411555507773017173 0ustar t0mstaffuse strict; use warnings; use Test::More; eval 'use Test::Spelling 0.11'; plan skip_all => 'Test::Spelling 0.11 not installed' if $@; plan skip_all => 'set TEST_SPELLING to enable this test' unless $ENV{TEST_SPELLING}; set_spell_cmd('aspell list'); add_stopwords(); all_pod_files_spelling_ok(); __DATA__ merchantability Doran FIXME Gruber Gruber's daringfireball Kulp METADATA Metadata MultiMarkdown WikiWords blockquotes metadata textMetaData url wiki wikilinks xHTML xhtmlMetaData lua haskell maruku javascript php reStructuredText Pandoc API MDTest preprocess urls STDIN STDOUT XHTML html shortversion quux GitHub Redistributions Gunnar Text-MultiMarkdown-1.000034/t/04markdown.t0000644000076500000240000000052111233534212016453 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 3; use_ok( 'Text::MultiMarkdown', 'markdown' ); my $m = Text::MultiMarkdown->new; my $html1 = $m->markdown(<<"EOF"); Foo Bar EOF is( $html1, <<"EOF" );

    Foo

    Bar

    EOF my $html2 = $m->markdown(<<"EOF"); Foo Bar EOF is( $html2, <<"EOF" );

    Foo

    Bar

    EOF Text-MultiMarkdown-1.000034/t/05options.t0000644000076500000240000000066211233534212016333 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 3; use_ok( 'Text::MultiMarkdown', 'markdown' ); my $m = Text::MultiMarkdown->new; my $html1 = $m->markdown(<<"EOF"); [test][] the link! EOF is( <<"EOF", $html1 );

    [test][] the link!

    EOF my $html2 = $m->markdown(<<"EOF", {urls => {test => 'http://example.com'}}); [test][] the link! EOF is( <<"EOF", $html2 );

    test the link!

    EOF Text-MultiMarkdown-1.000034/t/06wiki.t0000644000076500000240000000271211233534212015602 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 9; use_ok( 'Text::MultiMarkdown', 'markdown' ); my $page = 'WikiWord'; # FIXME - test # . No wiki links in headers? # . No wiki links in code section # Normal (no wiki links) my $m = Text::MultiMarkdown->new; my $nohtmlwiki = $m->markdown($page); ok($nohtmlwiki !~ /markdown("use wikilinks: true\n\n" . $page)))[0] . "\n"; ok($htmlwiki =~ /markdown($page), $nohtmlwiki, 'use wikilinks does not toggle pref'); is($m->markdown($page, { use_wikilinks => 1 }) => $htmlwiki, 'use_wikilinks pref in ->markdown produces same out as metadata'); is($m->markdown($page, { use_wikilinks => 0 }) => $nohtmlwiki, 'use_wikilinks = 0 pref in ->markdown produces same out as no metadata'); $m = Text::MultiMarkdown->new(use_wikilinks => 1); is($m->markdown($page) => $htmlwiki, 'use wikiwords pref in constructor produces same out as metadata'); is($m->markdown($page, { use_wikilinks => 0 }) => $nohtmlwiki, 'not use wikilinks pref in markdown produces same out as no metadata when instance has wikilinks enabled'); is($m->markdown('\\' . $page) => $nohtmlwiki, 'Wiki word escaping works as expected');Text-MultiMarkdown-1.000034/t/07fulldoc.t0000644000076500000240000001012711233534212016267 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 2; use_ok( 'Text::MultiMarkdown', 'markdown' ); my @data = ; my $markdown; my $expected; my $inout = 0; foreach my $l (@data) { if ($l =~ /^__END__/) { $inout++; next; } if ($inout) { $expected .= $l; next; } $markdown .= $l; } my $m = Text::MultiMarkdown->new; my $out = $m->markdown($markdown); #$out =~ s/ / /g; #$expected =~ s/ / /g; is($out, $expected, 'Output matches expected'); if ($out ne $expected) { eval { require Text::Diff; }; if (!$@) { print "=" x 80 . "\nDIFFERENCES:\n"; print Text::Diff::diff(\$expected => \$out,{ STYLE => "Unified" }); } else { warn("Install Text::Diff for more helpful failure message! ($@)"); } } __DATA__ # Heading 1 ## Heading 2 ### Heading 3 ### Other type of heading (level 2) ------------------------------- And another one (level 1) ========================= A paragraph, of *text*. * UL item 1 * UL item 2 Another paragraph \*Not bold text*. 1. OL, item 1 2. OL, item 2 A third paragraph * Second list, item 1 * Sub list item 1 * Sub list item 2 * Second list, item 2 Within a paragraph `code block`, followed by one which needs ``extra escapeing` `` © t0m. & note **ampersands** and > or < _are_ escaped __properly__ in output [testlink]: http://www.test.com/ "Test dot Com website" [testlink2]: http://www.test2.com/ This paragraph has [a link] [testlink] and [another link] [testlink2].. This is [an example](http://example.com/ "Title") inline link. [Google]: http://google.com/ Or, we could use . Or shortcut links like this: [Google][] > block quoted text > > in multiple paragraphs > and across multiple lines > > > and at >> multiple levels. This is a code block here... * * * ***** - - - un*fucking*believable - \*this text is surrounded by literal asterisks\*, but the text before that should be bold according to the docs, but isn't FIXME! ![Alt text](/path/to/img.jpg) ![Alt text2](/path/to/img2.jpg "Optional title") [img]: url/to/image "Optional title attribute" ![Alt text for ref mode][img] --------------------------------------- __END__

    Heading 1

    Heading 2

    Heading 3

    Other type of heading (level 2)

    And another one (level 1)

    A paragraph, of text.

    • UL item 1
    • UL item 2

    Another paragraph *Not bold text*.

    1. OL, item 1
    2. OL, item 2

    A third paragraph

    • Second list, item 1
      • Sub list item 1
      • Sub list item 2
    • Second list, item 2

    Within a paragraph code block, followed by one which needs extra escapeing` © t0m. & note ampersands and > or < are escaped properly in output

    This paragraph has a link and another link.. This is an example inline link.

    Or, we could use http://wuto-links.com/. Or shortcut links like this: Google

    block quoted text

    in multiple paragraphs and across multiple lines

    and at multiple levels.

    This is a code block here...
    



    un*fucking*believable - *this text is surrounded by literal asterisks*, but the text before that should be bold according to the docs, but isn't FIXME!

    Alt text

    Alt text2

    Alt text for ref mode


    Text-MultiMarkdown-1.000034/t/08exporter.t0000644000076500000240000000126411233534212016512 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 5; use Test::Exception; use_ok( 'Text::MultiMarkdown', 'markdown' ); my $instr = q{A trivial block of text}; my $outstr = q{

    A trivial block of text

    }; lives_ok { $outstr = markdown($instr); } 'Functional markdown works without an exception'; chomp($outstr); is( $outstr => '

    ' . $instr . '

    ', 'exported markdown function works' ); { local $TODO = 'Broken here'; $outstr = ''; lives_ok { $outstr = Text::MultiMarkdown->markdown($instr); } 'Lives (class method)'; chomp($outstr); is($outstr, '

    ' . $instr . '

    ', 'Text::MultiMarkdown->markdown() works (as class method)'); }; Text-MultiMarkdown-1.000034/t/09base_url.t0000644000076500000240000000175311233534212016442 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 4; use_ok( 'Text::MultiMarkdown'); my $instr = q{A trivial block of text with a WikiWord}; my $m = Text::MultiMarkdown->new( use_wikilinks => 1, ); my $outstr = qq{

    A trivial block of text with a WikiWord

    \n}; is( $m->markdown($instr) => $outstr, 'Markdown with wiki links, no base url' ); $m = Text::MultiMarkdown->new( use_wikilinks => 1, base_url => 'http://www.test.com/', ); $outstr = qq{

    A trivial block of text with a WikiWord

    \n}; is( $m->markdown($instr) => $outstr, 'Markdown with wiki links, with base url in instance' ); $m = Text::MultiMarkdown->new( use_wikilinks => 1, use_metadata => 1, ); $instr = qq{base url: http://www.test.com/\n\n} . $instr; $outstr = qq{base url: http://www.test.com/
    \n\n} . $outstr; is( $m->markdown($instr) => $outstr, 'Markdown with wiki links, with base url in metadata' ); Text-MultiMarkdown-1.000034/t/10use_metadata.t0000644000076500000240000000324511233534212017270 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 7; #1 use_ok( 'Text::MultiMarkdown'); my $instr = qq{use wikilinks: on\nbase url: http://www.test.com/\n\nA trivial block of text with a WikiWord}; my $m = Text::MultiMarkdown->new( use_metadata => 1, ); my $expstr = qq{base url: http://www.test.com/
    \nuse wikilinks: on
    \n

    A trivial block of text with a WikiWord

    \n}; is( #2 $m->markdown($instr) => $expstr, 'Markdown with wiki links, and base url, metadata switched on in instance' ); $m = Text::MultiMarkdown->new( use_metadata => 0, ); my $expstr2 = qq{

    use wikilinks: on\nbase url: http://www.test.com/

    \n\n

    A trivial block of text with a WikiWord

    \n}; is( #3 $m->markdown($instr) => $expstr2, 'Markdown with wiki links, with base url in instance (no metadata)' ); is( #4 $m->markdown($instr, { use_metadata => 1 }) => $expstr, 'Markdown with wiki links, and base url, metadata switched on in options' ); is( #5 $m->markdown($instr) => $expstr2, 'Markdown with wiki links, with base url in instance (no metadata) - try 2 to ensure option to markdown does not frob setting' ); $m = Text::MultiMarkdown->new( use_metadata => 0, strip_metadata => 1, ); $expstr = qq{

    A trivial block of text with a WikiWord

    \n}; is( #6 $m->markdown($instr) => $expstr, 'Markdown with wiki links, with metadata off and stripped' ); $expstr = qq{

    A trivial block of text with a WikiWord

    \n}; is( #7 $m->markdown($instr, { use_metadata => 1 }) => $expstr, 'Markdown with wiki links, with metadata on but stripped' ); Text-MultiMarkdown-1.000034/t/11docment_format.t0000644000076500000240000000270211233534212017633 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 5; #1 use_ok( 'Text::MultiMarkdown'); my $instr = q{A trivial block of text}; my $m = Text::MultiMarkdown->new(); my $outstr = qq{

    A trivial block of text

    \n}; is( #2 $m->markdown($instr) => $outstr, 'Markdown' ); $m = Text::MultiMarkdown->new(); $outstr = qq{ \n\t\n\t\n\n

    A trivial block of text

    \n\n}; is( #3 $m->markdown($instr, {document_format => 'Complete'}) => $outstr, 'Markdown with complete xhtml doc' ); $instr = q{title: A page title css: somestyle.css other: some metadata A trivial block of text}; $outstr = qq{ \n\t\n\t\t \t\t \t\tA page title\n\t\n\n

    A trivial block of text

    \n\n}; is( #4 $m->markdown($instr, {document_format => 'complete'}) => $outstr, 'Markdown with complete xhtml doc (and metadata)' ); $outstr = qq{css: somestyle.css
    \nother: some metadata
    \ntitle: A page title
    \n

    A trivial block of text

    \n}; is( #5 $m->markdown($instr) => $outstr, 'Markdown withmetadata, but no complete doc' ); Text-MultiMarkdown-1.000034/t/12empty_element_suffix.t0000644000076500000240000000100211233534212021056 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 3; #1 use_ok( 'Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new(); my $instr = qq{some metadata: here\n\nSome text}; my $outstr = qq{some metadata: here
    \n\n

    Some text

    \n}; is( #2 $m->markdown($instr) => $outstr, 'Normal element suffix as expected' ); $outstr = qq{some metadata: here
    \n\n

    Some text

    \n}; is( #3 $m->markdown($instr, {empty_element_suffix => '>'}) => $outstr, 'HTML element suffix also as expected' ); Text-MultiMarkdown-1.000034/t/13multimarkdown-nometadata-firstpara.t0000644000076500000240000000055311233534212023637 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 2; use_ok( 'Text::MultiMarkdown', 'markdown' ); my $m = Text::MultiMarkdown->new; # A line of whitespace should cause metadata to be skipped.. my $html1 = $m->markdown(<<"EOF"); Simple block on one line:
    foo
    EOF is( $html1, <<"EOF" );

    Simple block on one line:

    foo
    EOF Text-MultiMarkdown-1.000034/t/14unicode.t0000644000076500000240000000073311233534212016265 0ustar t0mstaffuse utf8; use strict; use warnings; use Test::More tests => 3; # This also has a test case in the .mdtest directory. use_ok('Text::MultiMarkdown', 'markdown'); my $m = Text::MultiMarkdown->new; my $html1; $html1 = eval { $m->markdown(<<"EOF"); }; > Fo—o μορεοϋερ > ßåř EOF ok(!$@, "No exception from markdown ($@)"); is( $html1, <<"EOF" );

    Fo—o

    μορεοϋερ

    ßåř

    EOF Text-MultiMarkdown-1.000034/t/16headingsinlists.t0000644000076500000240000000123111233534212020023 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 3; use_ok('Text::MultiMarkdown', 'markdown'); my $m = Text::MultiMarkdown->new( heading_ids => 0 ); # This case works. my $html1 = $m->markdown(<<"EOF"); - # Heading 1 - ## Heading 2 EOF is( $html1, <<"EOF" );
    • Heading 1

    • Heading 2

    EOF # This case fails. my $html2 = $m->markdown(<<"EOF"); - # Heading 1 - ## Heading 2 EOF { local $TODO = 'Fails as lack of space between list elements means we only run span level tags, and headings are block level'; is( $html2, <<'EOF' );
    • Heading 1

    • Heading 2

    EOF }; Text-MultiMarkdown-1.000034/t/17olulreportedonlist.t0000644000076500000240000000057011233534212020612 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 2; use_ok('Text::MultiMarkdown', 'markdown'); my $m = Text::MultiMarkdown->new(); my $html1 = $m->markdown(<<"EOF"); - a - b 1. 1 2. 2 EOF { local $TODO = 'Does not work as expected in current Markdown, known bug.'; is( $html1, <<"EOF" );
    • a
    • b
    1. 1
    2. 2
    EOF };Text-MultiMarkdown-1.000034/t/18codespanextra.t0000644000076500000240000000155511233534212017506 0ustar t0mstaff# Test a 'bug' reported by Nathan Waddell/J. Shirley from the #catalyst-dev community. # I don't think that this is a bug at all ;) use strict; use warnings; use Test::More tests => 4; use_ok('Text::MultiMarkdown', 'markdown'); my $m = Text::MultiMarkdown->new( use_metadata => 0, ); my $html1 = $m->markdown(<<'EOF'); `cpan Module::Install` `cpan Task::Catalyst` EOF is( $html1, <<'EOF' );

    cpan Module::Install cpan Task::Catalyst

    EOF my $html2 = $m->markdown(<<'EOF'); `cpan Module::Install` `cpan Task::Catalyst` EOF is( $html2, <<'EOF' );

    cpan Module::Install

    cpan Task::Catalyst

    EOF my $html3 = $m->markdown(<<'EOF'); `cpanp -i Module::Install` `cpanp -i Task::Catalyst` EOF is( $html3, <<'EOF' );

    cpanp -i Module::Install cpanp -i Task::Catalyst

    EOF Text-MultiMarkdown-1.000034/t/20fulldocs-text-multimarkdown.t0000644000076500000240000000625111325304745022335 0ustar t0mstaffuse strict; use warnings; use Test::More; use FindBin qw($Bin); use List::MoreUtils qw(uniq); use Encode; our $TIDY = 0; ### Generate difftest subroutine, pretty prints diffs if you have Text::Diff, use uses ### Test::More::is otherwise. eval { require Text::Diff; }; if (!$@) { *difftest = sub { my ($got, $expected, $testname) = @_; $got .= "\n"; $expected .= "\n"; if ($got eq $expected) { pass($testname); return; } print "=" x 80 . "\nDIFFERENCES: + = processed version from .text, - = template from .html\n"; print encode('utf8', Text::Diff::diff(\$expected => \$got, { STYLE => "Unified" }) . "\n"); fail($testname); }; } else { warn("Install Text::Diff for more helpful failure messages! ($@)"); *difftest = \&Test::More::is; } sub tidy { $TIDY = 1; eval "use HTML::Tidy; "; if ($@) { plan skip_all => 'This test needs HTML::Tidy installed to pass correctly, skipping'; exit; } } ### Actual code for this test - unless(caller) stops it ### being run when this file is required by other tests unless (caller) { my $docsdir = "$Bin/Text-MultiMarkdown.mdtest"; my @files = get_files($docsdir); plan tests => scalar(@files) + 2; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new( use_metadata => 1, ); { my $has_warned = 0; local $SIG{__WARN__} = sub { $has_warned++; warn(@_); }; run_tests($m, $docsdir, @files); is($has_warned, 0, 'No warnings expected'); }; } sub get_files { my ($docsdir) = @_; my $DH; opendir($DH, $docsdir) or die("Could not open $docsdir"); my @files = uniq map { s/\.(xhtml|html|text)$// ? $_ : (); } readdir($DH); closedir($DH); return @files; } sub slurp { my ($filename) = @_; open my $file, '<', $filename or die "Couldn't open $filename: $!"; local $/ = undef; return <$file>; } sub run_tests { my ($m, $docsdir, @files) = @_; foreach my $test (@files) { my ($input, $output); eval { if (-f "$docsdir/$test.html") { $output = slurp("$docsdir/$test.html"); } else { $output = slurp("$docsdir/$test.xhtml"); } $input = slurp("$docsdir/$test.text"); }; $input .= "\n\n"; $output .= "\n\n"; if ($@) { fail("1 part of test file not found: $@"); next; } $output =~ s/\s+\z//; # trim trailing whitespace my $processed = $m->markdown($input); $processed =~ s/\s+\z//; # trim trailing whitespace if ($TIDY) { local $SIG{__WARN__} = sub {}; my $t = HTML::Tidy->new; $output = $t->clean($output); $processed = $t->clean($processed); } # Un-comment for debugging if you have space diffs you can't see.. $output =~ s/ / /g; $output =~ s/\t/&tab;/g; $processed =~ s/ / /g; $processed =~ s/\t/&tab;/g; difftest($processed, $output, "Docs test: $test"); } } 1; Text-MultiMarkdown-1.000034/t/22fulldocs-multimarkdown-todo.t0000644000076500000240000000060611233534212022306 0ustar t0mstaffuse strict; use warnings; use Test::More; use FindBin qw($Bin); require "$Bin/20fulldocs-text-multimarkdown.t"; my $docsdir = "$Bin/docs-multimarkdown-todo"; my @files = get_files($docsdir); plan tests => scalar(@files) + 1; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new(); { local $TODO = 'These tests are known broken'; run_tests($m, $docsdir, @files); }; Text-MultiMarkdown-1.000034/t/23afulldocs-multimarkdown.t0000644000076500000240000000052011233534212021500 0ustar t0mstaffuse strict; use warnings; use Test::More; use FindBin qw($Bin); require "$Bin/20fulldocs-text-multimarkdown.t"; tidy(); my $docsdir = "$Bin/MultiMarkdown.mdtest"; my @files = get_files($docsdir); plan tests => scalar(@files) + 1; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new(); run_tests($m, $docsdir, @files); Text-MultiMarkdown-1.000034/t/24fulldocs-pythonmarkdown2-tm.t0000644000076500000240000000120311233534212022226 0ustar t0mstaffuse strict; use warnings; use Test::More; use FindBin qw($Bin); require "$Bin/20fulldocs-text-multimarkdown.t"; my $docsdir = "$Bin/docs-pythonmarkdown2-tm-cases-pass"; my @files = get_files($docsdir); tidy(); plan tests => scalar(@files) + 1; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new( use_metadata => 0, heading_ids => 0, # Remove MultiMarkdown behavior change in tags. img_ids => 0, # Remove MultiMarkdown behavior change in tags. ); { local $TODO = 'Not many of the python markdown tests pass, but they ran off and did their own thing'; run_tests($m, $docsdir, @files); }; Text-MultiMarkdown-1.000034/t/29fulldocs-maruku-unittest.t0000644000076500000240000000120511233534212021632 0ustar t0mstaffuse strict; use warnings; use Test::More; use FindBin qw($Bin); require "$Bin/20fulldocs-text-multimarkdown.t"; my $docsdir = "$Bin/docs-maruku-unittest"; my @files = get_files($docsdir); tidy(); plan tests => scalar(@files) + 1; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new( use_metadata => 0, heading_ids => 0, # Remove MultiMarkdown behavior change in tags. img_ids => 0, # Remove MultiMarkdown behavior change in tags. ); { local $TODO = 'Ruby (maruku) tests, do not pass, but mostly due to spacing - pick them all up and go through them..'; run_tests($m, $docsdir, @files); }; Text-MultiMarkdown-1.000034/t/30disable_multimarkdown_features.t0000644000076500000240000000234511233534212023114 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 4; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new( disable_tables => 1, disable_footnotes => 1, disable_bibliography => 1, ); my $instr = q{Here is some text containing a footnote.[^somesamplefootnote] [^somesamplefootnote]: Here is the text of the footnote itself}; my $expstr = q{

    Here is some text containing a footnote.[^somesamplefootnote]

    [^somesamplefootnote]: Here is the text of the footnote itself

    }; is($m->markdown($instr) => $expstr, 'disable_footnotes works as expected'); $instr = q{This is a borrowed idea[p. 23][#Doe:1996]. [#Doe:1996]: John Doe. *Some Book*. Blog Books, 1996. }; # NOTE expstr doesn't have the footnote, as that syntax is original markdown's link syntax, so # it is now resolved to a link $expstr = qq{

    This is a borrowed idea[p. 23][#Doe:1996].

    \n}; is($m->markdown($instr) => $expstr, 'disable_bibliography works as expected'); $instr = q{------------ | :-----------: | -----------: | Content | Long Cell || Content | Cell | Cell |}; $expstr = '

    ' . $instr . "

    \n"; is( $m->markdown($instr) => $expstr, 'disable_tables works as expected'); Text-MultiMarkdown-1.000034/t/35commandlinemultimarkdown.t0000644000076500000240000000102411325304745021750 0ustar t0mstaffuse strict; use warnings; use FindBin qw($Bin); use Test::More tests => 2; use Test::Exception; my $filename = "$Bin/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Syntax"; unshift(@ARGV, "$filename.text"); open my $file, '<', "$filename.xhtml" or die "Couldn't open $filename: $!"; my $expected = do {local $/ = undef; <$file>}; lives_ok { require "$Bin/../script/MultiMarkdown.pl"; } 'require MultiMarkdown.pl works'; my $out = main(); is($out, $expected, 'MultiMarkdown.pl does the right thing with the syntax guide'); Text-MultiMarkdown-1.000034/t/36footnotes.t0000644000076500000240000000114711245344113016665 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 2; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new( disable_footnotes => 0 ); my $instr = <This is buggy1.


    1. Use MYAPP_CONFIG_LOCAL_SUFFIX. ↩

    OUTPUT is($m->markdown($instr) => $expstr, 'underscores in code in footnotes'); Text-MultiMarkdown-1.000034/t/37deflists.t0000644000076500000240000000126311555507561016476 0ustar t0mstaffuse strict; use warnings; use Test::More tests => 2; use_ok('Text::MultiMarkdown'); my $m = Text::MultiMarkdown->new( disable_definition_lists => 0 ); my $instr = <
    Apple
    Pomaceous fruit of plants of the genus Malus in the family Rosaceae.
    An american computer company.
    Orange
    The fruit of an evergreen tree of the genus Citrus.
    OUTPUT is($m->markdown($instr) => $expstr, 'definition lists'); Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/0000755000076500000240000000000011555510013020411 5ustar t0mstaffText-MultiMarkdown-1.000034/t/docs-maruku-unittest/abbreviations.html0000644000076500000240000000032311233534212024125 0ustar t0mstaff

    The HTML specification is maintained by the W3C.

    Operation Tigra Genesis is going well.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/abbreviations.text0000644000076500000240000000026711233534212024154 0ustar t0mstaff The HTML specification is maintained by the W3C. *[HTML]: Hyper Text Markup Language *[W3C]: World Wide Web Consortium Operation Tigra Genesis is going well. *[Tigra Genesis]: Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/alt.html0000644000076500000240000000005011233534212022052 0ustar t0mstaff

    bar

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/alt.text0000644000076500000240000000002411233534212022073 0ustar t0mstaff ![bar](/foo.jpg) Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/blank.html0000644000076500000240000000003711233534212022366 0ustar t0mstaff

    Linea 1

    Linea 2

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/blank.text0000644000076500000240000000002211233534212022400 0ustar t0mstaff Linea 1 Linea 2 Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/blanks_in_code.html0000644000076500000240000000033311233534212024230 0ustar t0mstaff

    This block is composed of three lines:

    one
    
    three

    This block is composed of 5

    one
    
    
    four

    This block is composed of 2

    two
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/blanks_in_code.text0000644000076500000240000000022011233534212024243 0ustar t0mstaffThis block is composed of three lines: one three This block is composed of 5 one four This block is composed of 2 two Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/bug_def.html0000644000076500000240000000003211233534212022665 0ustar t0mstaff

    test:

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/bug_def.text0000644000076500000240000000001311233534212022704 0ustar t0mstaff[test][]: Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/bug_table.html0000644000076500000240000000042311233534212023222 0ustar t0mstaff

    hello

    hh
    c1c2
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/bug_table.text0000644000076500000240000000026511233534212023246 0ustar t0mstaff hello {: summary="Table summary" .class1 style="color:red"} h | h ----------|-- {:t} c1 | c2 {: summary="Table summary" .class1 style="color:red"} {:t: scope="row"} Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/code.html0000644000076500000240000000017311233534212022212 0ustar t0mstaff

    Here is an example of AppleScript:

    tell application "Foo"
        beep
    end tell
    	tab
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/code.text0000644000076500000240000000014311233534212022227 0ustar t0mstaffHere is an example of AppleScript: tell application "Foo" beep end tell tab Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/code2.html0000644000076500000240000000010511233534212022267 0ustar t0mstaff

    Code

    Ciao
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/code2.text0000644000076500000240000000002411233534212022307 0ustar t0mstaff> Code > > Ciao Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/code3.html0000644000076500000240000000035011233534212022272 0ustar t0mstaff

    This is code (4 spaces):

    Code

    This is not code

    Code

    This is code (1 tab):

    Code

    This is not code

    Code
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/code3.text0000644000076500000240000000017411233534212022316 0ustar t0mstaff This is code (4 spaces): Code This is not code Code This is code (1 tab): Code This is not code Code Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/convert.pl0000644000076500000240000000176311233534212022435 0ustar t0mstaffuse strict; use warnings; open(LS, "ls -1 *.md|") or die; my @list = ; close(LS); foreach (@list) { chomp; s/\.md$//; my ($markdown, $html) = convert_to_perl_test("$_.md"); open(MD, ">$_.text") or die; print MD $markdown; close(MD); open(MD, ">$_.html") or die; print MD $html; close(MD); } sub convert_to_perl_test { my ($file) = @_; my $FH; open($FH, '<', $file) or die("Cannot open $file"); my ($markdown, $html); my @lines = <$FH>; close($FH); my $mode = 0; foreach my $l (@lines) { if ($l =~ /^\*\*\*/) { $mode = 0; if ($l =~ /Markdown input/i) { $mode = 1; } if ($l =~ /Output of to_html/) { $mode = 2; } } elsif ($mode > 0) { if (1 == $mode) { $markdown .= $l; } else { $html .= $l; } } } return ($markdown, $html); } Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/data_loss.html0000644000076500000240000000004311233534212023245 0ustar t0mstaff
    1. abcd efgh ijkl
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/data_loss.text0000644000076500000240000000002311233534212023263 0ustar t0mstaff1. abcd efgh ijkl Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/easy.html0000644000076500000240000000006511233534212022241 0ustar t0mstaff

    Hello! how are you?

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/easy.text0000644000076500000240000000003211233534212022253 0ustar t0mstaff*Hello!* how are **you**? Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/email.html0000644000076500000240000000025711233534212022372 0ustar t0mstaff

    This is an email address: andrea@invalid.it

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/email.text0000644000076500000240000000006211233534212022404 0ustar t0mstaff This is an email address: Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/entities.html0000644000076500000240000000164011233534212023124 0ustar t0mstaff

    Maruku translates HTML entities to the equivalent in LaTeX:

    EntityResult
    &copy;©
    &pound;£
    a&nbsp;ba b
    &lambda;λ
    &mdash;

    Entity-substitution does not happen in code blocks or inline code.

    The following should not be translated:

    &copy;

    It should read just like this: &copy;.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/entities.text0000644000076500000240000000060111233534212023140 0ustar t0mstaffMaruku translates HTML entities to the equivalent in LaTeX: Entity | Result ------------|---------- `©` | © `£` | £ `a b` | a b `λ` | λ `—` | — Entity-substitution does not happen in code blocks or inline code. The following should not be translated: © It should read just like this: `©`. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/escaping.html0000644000076500000240000000053211233534212023070 0ustar t0mstaff

    Hello: ! ! ` { } [ ] ( ) # . ! * * *

    Ora, emphasis, bold, * <- due asterischi-> * , un underscore-> _ , emphasis, incrediblee!

    This is Code with a special: -> ` <-(after)

    Start of paragraph

    End of paragraph

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/escaping.text0000644000076500000240000000036711233534212023116 0ustar t0mstaff Hello: ! \! \` \{ \} \[ \] \( \) \# \. \! * \* * Ora, *emphasis*, **bold**, * <- due asterischi-> * , un underscore-> _ , _emphasis_, incre*dible*e! This is ``Code with a special: -> ` <- ``(after) `Start ` of paragraph End of `paragraph ` Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/extra_dl.html0000644000076500000240000000027011233534212023100 0ustar t0mstaff
    Apple
    Pomaceous fruit of plants of the genus Malus in the family Rosaceae.
    Orange
    The fruit of an evergreen tree of the genus Citrus.
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/extra_dl.text0000644000076500000240000000024611233534212023123 0ustar t0mstaffCSS: style.css Apple : Pomaceous fruit of plants of the genus Malus in the family Rosaceae. Orange : The fruit of an evergreen tree of the genus Citrus. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/extra_header_id.html0000644000076500000240000000050511233534212024406 0ustar t0mstaff

    Header 1

    Header 2

    Header 3

    Then you can create links to different parts of the same document like this:

    Link back to header 1, Link back to header 2, Link back to header 3

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/extra_header_id.text0000644000076500000240000000045311233534212024430 0ustar t0mstaffHeader 1 {#header1} ======== Header 2 {#header2} -------- ### Header 3 ### {#header3} Then you can create links to different parts of the same document like this: [Link back to header 1](#header1), [Link back to header 2](#header2), [Link back to header 3](#header3) Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/extra_table1.html0000644000076500000240000000046211233534212023654 0ustar t0mstaff
    First HeaderSecond Header
    Content CellContent Cell
    Content CellContent Cell
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/extra_table1.text0000644000076500000240000000020711233534212023671 0ustar t0mstaffCSS: style.css First Header | Second Header ------------- | ------------- Content Cell | Content Cell Content Cell | Content Cell Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/footnotes.html0000644000076500000240000000141411233534212023317 0ustar t0mstaff

    That’s some text with a footnote 1 and another 2 and another 3.

    This is not a footnote.


    1. And that’s the footnote. This is second sentence (same paragraph).

    2. This is the very long one.

      That’s the second paragraph.

    3. And that’s the footnote.

      That’s the second paragraph of the footnote.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/footnotes.text0000644000076500000240000000051011233534212023333 0ustar t0mstaffThat's some text with a footnote [^b] and another [^c] and another [^a]. [^a]: And that's the footnote. That's the second paragraph of the footnote. [^b]: And that's the footnote. This is second sentence (same paragraph). [^c]: This is the very long one. That's the second paragraph. This is not a footnote. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/headers.html0000644000076500000240000000031311233534212022707 0ustar t0mstaff

    A title with emphasis

    A title with emphasis

    A title with emphasis

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/headers.text0000644000076500000240000000021011233534212022723 0ustar t0mstaffA title with *emphasis* ======================= A title with *emphasis* ----------------------- #### A title with *emphasis* #### Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/hex_entities.html0000644000076500000240000000031311233534212023764 0ustar t0mstaff

    Examples of numeric character references include © or © for the copyright symbol, Α or Α for the Greek capital letter alpha, and ا or ا for the Arabic letter alef.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/hex_entities.text0000644000076500000240000000030711233534212024007 0ustar t0mstaffExamples of numeric character references include © or © for the copyright symbol, Α or Α for the Greek capital letter alpha, and ا or ا for the Arabic letter alef. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/hrule.html0000644000076500000240000000003711233534212022416 0ustar t0mstaff




    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/hrule.text0000644000076500000240000000000711233534212022433 0ustar t0mstaff* * * Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html2.html0000644000076500000240000000003611233534212022324 0ustar t0mstaff

    One

    123

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html2.text0000644000076500000240000000004311233534212022342 0ustar t0mstaffOne
    123
    123 Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html3.html0000644000076500000240000000051111233534212022323 0ustar t0mstaff

    taking part in some arcane conspirations which involve coffee, robots, sushi,

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html3.text0000644000076500000240000000050411233534212022345 0ustar t0mstafftaking part in some arcane conspirations which involve coffee, robots, sushi, Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html4.html0000644000076500000240000000030711233534212022327 0ustar t0mstaff
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html4.text0000644000076500000240000000031611233534212022347 0ustar t0mstaff
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html5.html0000644000076500000240000000035111233534212022327 0ustar t0mstaff
    Aperitif
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/html5.text0000644000076500000240000000035511233534212022353 0ustar t0mstaff
    Aperitif
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/ie.html0000644000076500000240000000127711233534212021703 0ustar t0mstaff

    <p>here's an apostrophe & a quote "</p>

    <p>here's an apostrophe & a quote "</p>
    <p>here's an apostrophe & a quote "</p>
    <p>here's an apostrophe & a quote "</p>
    <p>here's an apostrophe & a quote "</p>
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/ie.text0000644000076500000240000000046011233534212021714 0ustar t0mstaff`

    here's an apostrophe & a quote "

    `

    here's an apostrophe & a quote "

    {:}

    here's an apostrophe & a quote "

    {:lang=xml}

    here's an apostrophe & a quote "

    {:html_use_syntax=true lang=not_supported}

    here's an apostrophe & a quote "

    {:html_use_syntax=true lang=xml} Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/images.html0000644000076500000240000000122711233534212022546 0ustar t0mstaff

    This page does not uilizes Cascading Style Sheets

    Please mouseover to see the title: Cascading Style Sheets

    Please mouseover to see the title: Cascading Style Sheets

    I’ll say it one more time: this page does not use Cascading Style Sheets

    This is double size: Cascading Style Sheets

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/images.text0000644000076500000240000000131411233534212022563 0ustar t0mstaff This page does not uilizes ![Cascading Style Sheets](http://jigsaw.w3.org/css-validator/images/vcss) Please mouseover to see the title: ![Cascading Style Sheets](http://jigsaw.w3.org/css-validator/images/vcss "Title ok!") Please mouseover to see the title: ![Cascading Style Sheets](http://jigsaw.w3.org/css-validator/images/vcss 'Title ok!') I'll say it one more time: this page does not use ![Cascading Style Sheets] [css] This is double size: ![Cascading Style Sheets] [css2] [css]: http://jigsaw.w3.org/css-validator/images/vcss "Optional title attribute" [css2]: http://jigsaw.w3.org/css-validator/images/vcss "Optional title attribute" class=external style="border:0;width:188px;height:131px" Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/images2.html0000644000076500000240000000015711233534212022631 0ustar t0mstaff

    This is an image.

    This is an image.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/images2.text0000644000076500000240000000010311233534212022640 0ustar t0mstaff This is an ![image][]. This is an ![image]. [image]: image.jpg Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/inline_html.html0000644000076500000240000000263111233534212023603 0ustar t0mstaff

    Input:

    <em>Emphasis</em>

    Result: Emphasis

    Input:

    <img src="http://jigsaw.w3.org/css-validator/images/vcss"/>

    Result on span:

    Result alone:

    Without closing:

    This is

    true

    markdown text (paragraph)

    This is

    true

    markdown text (no paragraph)

    This is

    true

    markdown text (block paragraph)

    This is

    true

    markdown text. (no par)

    This is

    true

    markdown text. (par)

    The following is invalid HTML, and will generate an error:

    HTML parse error: 
    <table>
    <td markdown="1">This is *true* markdown text. (no par)</td>
    <td markdown="block">This is *true* markdown text. (par)</td>
    </tr>
    HTML parse error: 
    </table>
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/inline_html.text0000644000076500000240000000166711233534212023633 0ustar t0mstaffCSS: style.css Input: Emphasis Result: Emphasis Input: Result on span: Result alone: Without closing:
    This is *true* markdown text (paragraph)

    This is *true* markdown text (no paragraph)

    This is *true* markdown text (block paragraph)

    This is *true* markdown text. (no par) This is *true* markdown text. (par)
    The following is invalid HTML, and will generate an error:
    This is *true* markdown text. (no par) This is *true* markdown text. (par)
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/inline_html2.html0000644000076500000240000000012011233534212023654 0ustar t0mstaff

    Test bold

    Test bold

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/inline_html2.text0000644000076500000240000000011011233534212023673 0ustar t0mstaff
    Test **bold**

    Test **bold**

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/links.html0000644000076500000240000000165411233534212022425 0ustar t0mstaff

    Search on Google

    Search on Google

    Search on Google

    Search on Google

    Search on Google images

    Inline: Google images

    Inline with title: Google images

    Inline with title: Google images

    Search on http://www.gogole.com or http://Here.com or ask bill@google.com or you might ask bill@google.com.

    If all else fails, ask Google

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/links.text0000644000076500000240000000142211233534212022436 0ustar t0mstaff Search on [Google][] Search on [Google] [] Search on [Google] [google] Search on [Google] [Google] Search on [Google images][] Inline: [Google images](http://google.com) Inline with title: [Google images](http://google.com "Title") Inline with title: [Google images]( http://google.com "Title" ) Search on or or ask or you might ask bill@google.com. If all else fails, ask [Google](http://www.google.com) [google]: http://www.google.com [google2]: http://www.google.com 'Single quotes' [google3]: http://www.google.com "Double quotes" [google4]: http://www.google.com (Parenthesis) [Google Search]: http://www.google.com "Google search" [Google Images]: http://images.google.com (Google images) Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list1.html0000644000076500000240000000021011233534212022324 0ustar t0mstaff
    • A list item with a blockquote:

      This is a blockquote inside a list item.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list1.text0000644000076500000240000000013211233534212022347 0ustar t0mstaff* A list item with a blockquote: > This is a blockquote > inside a list item. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list2.html0000644000076500000240000000040511233534212022333 0ustar t0mstaff
    • This is a list item with two paragraphs.

      This is the second paragraph in the list item. You’re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

    • other

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list2.text0000644000076500000240000000032611233534212022355 0ustar t0mstaff* This is a list item with two paragraphs. This is the second paragraph in the list item. You're only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. * other Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list3.html0000644000076500000240000000035211233534212022335 0ustar t0mstaff
    • A list item with a blockquote:

      This is a blockquote inside a list item.

    • A list item with a code block:

      <code goes here>
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list3.text0000644000076500000240000000022711233534212022356 0ustar t0mstaff* A list item with a blockquote: > This is a blockquote > inside a list item. * A list item with a code block: Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list4.html0000644000076500000240000000031711233534212022337 0ustar t0mstaff

    This is a list:

    • one
    • two

    This is not a list: * one ciao

    This is a list:

    1. one
    2. two

    This is not a list: 1987. one ciao

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/list4.text0000644000076500000240000000020011233534212022346 0ustar t0mstaffThis is a list: * one * two This is not a list: * one ciao This is a list: 1. one 1. two This is not a list: 1987. one ciao Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists.html0000644000076500000240000000236611233534212022444 0ustar t0mstaff
    • Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
    • Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
    • Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
    • Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
    • Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.

    Ancora

    • This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.

      ATTENZIONE!

    • Suspendisse id sem consectetuer libero luctus adipiscing.

    Ancora

    • This is a list item with two paragraphs.

      This is the second paragraph in the list item. You’re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

    • Another item in the same list.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists.text0000644000076500000240000000217311233534212022460 0ustar t0mstaff* Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. Ancora * This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. ATTENZIONE! * Suspendisse id sem consectetuer libero luctus adipiscing. Ancora * This is a list item with two paragraphs. This is the second paragraph in the list item. You're only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. * Another item in the same list. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists11.html0000644000076500000240000000002011233534212022567 0ustar t0mstaff

    - ένα

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists11.text0000644000076500000240000000001211233534212022610 0ustar t0mstaff- ένα Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists6.html0000644000076500000240000000000111233534212022512 0ustar t0mstaff Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists6.text0000644000076500000240000000000111233534212022532 0ustar t0mstaff Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists7.html0000644000076500000240000000014211233534212022521 0ustar t0mstaff

    Ciao

    • Tab * Tab * Tab

    Ciao

    • Tab * Tab * Tab
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists7.text0000644000076500000240000000003411233534212022541 0ustar t0mstaffCiao * Tab * Tab * Tab Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists7b.html0000644000076500000240000000030211233534212022661 0ustar t0mstaff
    • a
      • a1
      • a2
    • b

    -----| WARNING | -----
    • a

      • a1
      • a2
    • b

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists7b.text0000644000076500000240000000003011233534212022677 0ustar t0mstaff* a * a1 * a2 * b Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists8.html0000644000076500000240000000026011233534212022523 0ustar t0mstaff

    Here is a paragraph.

    • Item 1
    • Item 2
    • Item 3
    -----| WARNING | -----

    Here is a paragraph.

    * Item 1 * Item 2 * Item 3

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists8.text0000644000076500000240000000007411233534212022546 0ustar t0mstaffHere is a paragraph. * Item 1 * Item 2 * Item 3 Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists9.html0000644000076500000240000000015511233534212022527 0ustar t0mstaff
    • Due

      1. tre
      2. tre
      3. tre
    • Due

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists9.text0000644000076500000240000000004711233534212022547 0ustar t0mstaff- Due 1. tre 1. tre 1. tre - Due Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists_after_paragraph.html0000644000076500000240000000161511233534212025646 0ustar t0mstaff

    Paragraph, list with no space: * ciao

    Paragraph, list with 1 space: * ciao

    Paragraph, list with 3 space: * ciao

    Paragraph, list with 4 spaces: * ciao

    Paragraph, list with 1 tab: * ciao

    Paragraph (1 space after), list with no space: * ciao

    Paragraph (2 spaces after), list with no space:
    * ciao

    Paragraph (3 spaces after), list with no space:
    * ciao

    Paragraph with block quote:

    Quoted

    Paragraph with header:

    Paragraph with header on two lines:

    Paragraph with html after

    Paragraph with html after, indented: Emphasis

    Paragraph with html after, indented: Emphasis tralla Emph

    Paragraph with html after, indented: Emphasis *tralla* Emph

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists_after_paragraph.text0000644000076500000240000000135611233534212025670 0ustar t0mstaffParagraph, list with no space: * ciao Paragraph, list with 1 space: * ciao Paragraph, list with 3 space: * ciao Paragraph, list with 4 spaces: * ciao Paragraph, list with 1 tab: * ciao Paragraph (1 space after), list with no space: * ciao Paragraph (2 spaces after), list with no space: * ciao Paragraph (3 spaces after), list with no space: * ciao Paragraph with block quote: > Quoted Paragraph with header: ### header ### Paragraph with header on two lines: header ------ Paragraph with html after
    Paragraph with html after, indented: Emphasis Paragraph with html after, indented: Emphasis *tralla* Emph Paragraph with html after, indented: Emphasis *tralla* Emph Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists_ol.html0000644000076500000240000000257311233534212023136 0ustar t0mstaff
    1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
    2. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
    3. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
    4. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.
    5. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing.

    Ancora

    1. This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.

      ATTENZIONE!

      • Uno

      • Due

        1. tre
        2. tre
        3. tre
      • Due

    2. Suspendisse id sem consectetuer libero luctus adipiscing.

    Ancora

    • This is a list item with two paragraphs.

      This is the second paragraph in the list item. You’re only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit.

    • Another item in the same list.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/lists_ol.text0000644000076500000240000000231011233534212023143 0ustar t0mstaff1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. 2. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. 3. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. 3. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. 4. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. Ancora 1. This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. ATTENZIONE! - Uno - Due 1. tre 1. tre 1. tre - Due 2. Suspendisse id sem consectetuer libero luctus adipiscing. Ancora * This is a list item with two paragraphs. This is the second paragraph in the list item. You're only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. * Another item in the same list. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/loss.html0000644000076500000240000000000711233534212022254 0ustar t0mstaff
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/loss.text0000644000076500000240000000001211233534212022270 0ustar t0mstaff
    123 Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/misc_sw.html0000644000076500000240000001032011233534212022737 0ustar t0mstaff

    General

    • Operating System : Mac OS X: heaven, after the purgatory of Linux and the hell of Windows.
    • Browser: Firefox. On a Mac, Camino.
    • Email: GMail, “search, don’t sort” really works.
    • Text Editor: TextMate, you have to buy it, but it’s worth every penny. There are rumours that it’s been converting (recovering) Emacs users (addicts). Unfortunately, it’s Mac only. An alternative is jedit (GPL, Java).

    Development

    • Build system: cmake, throw the autotools away.

    • Source code control system: ditch CVS for subversion.

    • Project management: Trac tracks everything.

    • Scripting language: Ruby is Japanese pragmatism (and has a poignant guide). Python, you say? Python is too academic and snob:

      $ python       
      Python 2.4.1 (\#1, Jun  4 2005, 00:54:33) 
      Type "help", "copyright", "credits" or "license" for more information.
      >>> exit
      'Use Ctrl-D (i.e. EOF) to exit.'
      >>> quit
      'Use Ctrl-D (i.e. EOF) to exit.'
    • Java IDE: JBuilder is great software and has a free version (IMHO better than Eclipse). Java is not a pain anymore since it gained generics and got opensourced.

    • Mark-up language: HTML is so 2001, why don’t you take at look at Markdown? Look at the source of this page.

    • C++ libraries: * QT for GUIs. * GSL for math. * Magick++ for manipulating images. * Cairo for creating PDFs. * Boost for just about everything else.

    Research

    • Writing papers: LaTeX
    • Writing papers & enjoying the process: LyX
    • Handsome figures in your papers: xfig or, better, jfig.
    • The occasional presentation with many graphical content: OpenOffice Impress (using the OOOlatex plugin); the alternative is PowerPoint with the TexPoint plugin.
    • Managing BibTeX: jabref: multi-platform, for all your bibtex needs.
    • IEEExplore and BibTeX: convert citations using BibConverter.

    Cool websites

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/misc_sw.text0000644000076500000240000001054411233534212022767 0ustar t0mstaffSubject: Software not painful to use Subject_short: painless software Topic: /misc/coolsw Archive: no Date: Nov 20 2006 Order: -9.5 inMenu: true ### General ### * *Operating System* : [Mac OS X][switch]: heaven, after the purgatory of Linux and the hell of Windows. * *Browser*: [Firefox][firefox]. On a Mac, [Camino][camino]. * *Email*: [GMail][gmail], "search, don't sort" really works. * *Text Editor*: [TextMate][textmate], you have to buy it, but it's worth every penny. There are rumours that it's been converting (recovering) Emacs users (addicts). Unfortunately, it's Mac only. An alternative is [jedit][jedit] (GPL, Java). ### Development ### * *Build system*: [cmake][cmake], throw the [autotools][autotools] away. * *Source code control system*: ditch CVS for [subversion][subversion]. * *Project management*: [Trac][trac] tracks everything. * *Scripting language*: [Ruby][ruby] is Japanese pragmatism (and has a [poignant][poignant] guide). Python, you say? Python is too academic and snob: $ python Python 2.4.1 (\#1, Jun 4 2005, 00:54:33) Type "help", "copyright", "credits" or "license" for more information. >>> exit 'Use Ctrl-D (i.e. EOF) to exit.' >>> quit 'Use Ctrl-D (i.e. EOF) to exit.' * *Java IDE*: [JBuilder][jbuilder] is great software and has a free version (IMHO better than Eclipse). Java is not a pain anymore since it gained [generics][java-generics] and got opensourced. * *Mark-up language*: HTML is so 2001, why don't you take at look at [Markdown][markdown]? [Look at the source of this page](data/misc_markdown.png). * *C++ libraries*: * [QT][qt] for GUIs. * [GSL][gsl] for math. * [Magick++][magick] for manipulating images. * [Cairo][cairo] for creating PDFs. * [Boost][boost] for just about everything else. ### Research ### * *Writing papers*: [LaTeX][latex] * *Writing papers & enjoying the process*: [LyX][lyx] * *Handsome figures in your papers*: [xfig][xfig] or, better, [jfig][jfig]. * *The occasional presentation with many graphical content*: [OpenOffice Impress][impress] (using the [OOOlatex plugin][ooolatex]); the alternative is PowerPoint with the [TexPoint][texpoint] plugin. * *Managing BibTeX*: [jabref][jabref]: multi-platform, for all your bibtex needs. * *IEEExplore and BibTeX*: convert citations using [BibConverter][bibconverter]. ### Cool websites ### * *Best site in the wwworld*: [Wikipedia][wikipedia] * [Mutopia][mutopia] for sheet music; [the Gutenberg Project][gutenberg] for books; [LiberLiber][liberliber] for books in italian. * *Blogs*: [Bloglines][bloglines] * *Sharing photos*: [flickr][flickr] exposes an API you can use. [firefox]: http://getfirefox.com/ [gmail]: http://gmail.com/ [bloglines]: http://bloglines.com/ [wikipedia]: http://en.wikipedia.org/ [ruby]: http://www.ruby-lang.org/ [poignant]: http://poignantguide.net/ruby/ [webgen]: http://webgen.rubyforge.org/ [markdown]: http://daringfireball.net/projects/markdown/ [latex]: http://en.wikipedia.org/wiki/LaTeX [lyx]: http://www.lyx.org [impress]: http://www.openoffice.org/product/impress.html [ooolatex]: http://ooolatex.sourceforge.net/ [texpoint]: http://texpoint.necula.org/ [jabref]: http://jabref.sourceforge.net/ [camino]: http://www.caminobrowser.org/ [switch]: http://www.apple.com/getamac/ [textmate]: http://www.apple.com/getamac/ [cmake]: http://www.cmake.org/ [xfig]: http://www.xfig.org/ [jfig]: http://tams-www.informatik.uni-hamburg.de/applets/jfig/ [subversion]: http://subversion.tigris.org [jbuilder]: http://www.borland.com/us/products/jbuilder/index.html [flickr]: http://www.flickr.com/ [myflickr]: http://www.flickr.com/photos/censi [bibconverter]: http://www.bibconverter.net/ieeexplore/ [autotools]: http://sources.redhat.com/autobook/ [jedit]: http://www.jedit.org/ [qt]: http://www.trolltech.no/ [gsl]: http://www.gnu.org/software/gsl/ [magick]: http://www.imagemagick.org/Magick++/ [cairo]: http://cairographics.org/ [boost]: http://www.boost.org/ [markdown]: http://en.wikipedia.org/wiki/Markdown [trac]: http://trac.edgewall.org/ [mutopia]: http://www.mutopiaproject.org/ [liberliber]: http://www.liberliber.it/ [gutenberg]: http://www.gutenberg.org/ [java-generics]: http://java.sun.com/j2se/1.5.0/docs/guide/language/generics.html Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/olist.html0000644000076500000240000000011611233534212022427 0ustar t0mstaff

    This is a list:

    1. one
    2. two
    3. three
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/olist.text0000644000076500000240000000005011233534212022444 0ustar t0mstaffThis is a list: 2. one 2. two 3. three Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/one.html0000644000076500000240000000002011233534212022050 0ustar t0mstaff

    One line

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/one.text0000644000076500000240000000001111233534212022070 0ustar t0mstaffOne line Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/paragraph.html0000644000076500000240000000002111233534212023235 0ustar t0mstaff

    Paragraph

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/paragraph.text0000644000076500000240000000001311233534212023256 0ustar t0mstaffParagraph Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/paragraphs.html0000644000076500000240000000015211233534212023425 0ustar t0mstaff

    Paragraph 1

    Paragraph 2

    Paragraph 3 Paragraph 4 Paragraph Br->
    Paragraph 5

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/paragraphs.text0000644000076500000240000000012211233534212023442 0ustar t0mstaffParagraph 1 Paragraph 2 Paragraph 3 Paragraph 4 Paragraph Br-> Paragraph 5 Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/smartypants.html0000644000076500000240000000122111233534212023660 0ustar t0mstaff
    'Twas a "test" to 'remember' in the '90s.

    ‘Twas a “test” to ‘remember’ in the ’90s.

    It was --- in a sense --- really... interesting.

    It was — in a sense — really… interesting.

    I -- too -- met << some curly quotes >> there or <<here>>No space.

    I – too – met « some curly quotes » there or «here»No space.

    She was 6\"12\'.

    She was 6"12'.

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/smartypants.text0000644000076500000240000000055211233534212023706 0ustar t0mstaff 'Twas a "test" to 'remember' in the '90s. 'Twas a "test" to 'remember' in the '90s. It was --- in a sense --- really... interesting. It was --- in a sense --- really... interesting. I -- too -- met << some curly quotes >> there or <>No space. I -- too -- met << some curly quotes >> there or <>No space. She was 6\"12\'. > She was 6\"12\'. Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/syntax_hl.html0000644000076500000240000000057111233534212023313 0ustar t0mstaff

    This is ruby code:

    require 'maruku'
    
    puts Maruku.new($stdin).to_html

    This is ruby code:

    require 'maruku'
    puts Maruku.new($stdin).to_html
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/syntax_hl.text0000644000076500000240000000026111233534212023327 0ustar t0mstaffThis is ruby code: require 'maruku' puts Maruku.new($stdin).to_html This is ruby code: require 'maruku' {: lang=ruby html_use_syntax} puts Maruku.new($stdin).to_html Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/table_attributes.html0000644000076500000240000000047111233534212024636 0ustar t0mstaff
    hh
    c1c2
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/table_attributes.text0000644000076500000240000000030011233534212024645 0ustar t0mstaff h | h ----------|-- {:t} c1 | c2 {: summary="Table summary" .class1 style="color:red" border=3 width="50%" frame=lhs rules=cols cellspacing=2em cellpadding=4px} {:t: scope="row"} Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/test.html0000644000076500000240000000005711233534212022260 0ustar t0mstaff
           $ python       
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/test.text0000644000076500000240000000003711233534212022276 0ustar t0mstaff $ python Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/wrapping.html0000644000076500000240000000112711233534212023127 0ustar t0mstaff

    Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break:
    Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet.

    • Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break:
      Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
    • Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/wrapping.text0000644000076500000240000000106611233534212023151 0ustar t0mstaffLorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Break: Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. * Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Lorem ipsum Break: Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet * Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet. Lorem ipsum dolor amet Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml.html0000644000076500000240000000035311233534212022100 0ustar t0mstaff Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml.text0000644000076500000240000000037211233534212022121 0ustar t0mstaff Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml2.html0000644000076500000240000000001311233534212022153 0ustar t0mstaff Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml2.text0000644000076500000240000000001311233534212022173 0ustar t0mstaff Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml3.html0000644000076500000240000000007511233534212022164 0ustar t0mstaffBlah
    em
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml3.text0000644000076500000240000000011011233534212022172 0ustar t0mstaff Blah
    *em*
    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml_instruction.html0000644000076500000240000000022011233534212024532 0ustar t0mstaff

    Targets

    Inside: last

    Text-MultiMarkdown-1.000034/t/docs-maruku-unittest/xml_instruction.text0000644000076500000240000000021511233534212024556 0ustar t0mstaff Targets Inside: last Text-MultiMarkdown-1.000034/t/docs-multimarkdown-todo/0000755000076500000240000000000011555510012021067 5ustar t0mstaffText-MultiMarkdown-1.000034/t/docs-multimarkdown-todo/Amps_and_angle_encoding.html0000644000076500000240000000120011233534212026505 0ustar t0mstaff

    AT&T has an ampersand in their name.

    AT&T is another way to write it.

    This & that.

    4 < 5.

    6 > 5.

    Here's a link with an ampersand in the URL.

    Here's a link with an amersand in the link text: AT&T.

    Here's an inline link.

    Here's an inline link.

    This is not handled <<properly>>.

    But this <<is>>.
    

    As is << this>>/.

    Text-MultiMarkdown-1.000034/t/docs-multimarkdown-todo/Amps_and_angle_encoding.text0000644000076500000240000000071011233534212026532 0ustar t0mstaffAT&T has an ampersand in their name. AT&T is another way to write it. This & that. 4 < 5. 6 > 5. Here's a [link] [1] with an ampersand in the URL. Here's a link with an amersand in the link text: [AT&T] [2]. Here's an inline [link](/script?foo=1&bar=2). Here's an inline [link](). [1]: http://example.com/?foo=1&bar=2 [2]: http://att.com/ "AT&T" This is not handled <>. But this <>. As is << this>>/. Text-MultiMarkdown-1.000034/t/docs-multimarkdown-todo/Email_Obfuscation.html0000644000076500000240000000050411233534212025340 0ustar t0mstaff

    some.user@some.company.com

    some.user@some.company.com

    Text-MultiMarkdown-1.000034/t/docs-multimarkdown-todo/Email_Obfuscation.text0000644000076500000240000000007111233534212025357 0ustar t0mstaffsome.user@some.company.com Text-MultiMarkdown-1.000034/t/docs-multimarkdown-todo/Tidyness.html0000644000076500000240000000020511233534212023555 0ustar t0mstaff

    A list within a blockquote:

    • asterisk 1
    • asterisk 2
    • asterisk 3
    Text-MultiMarkdown-1.000034/t/docs-multimarkdown-todo/Tidyness.text0000644000076500000240000000011611233534212023576 0ustar t0mstaff> A list within a blockquote: > > * asterisk 1 > * asterisk 2 > * asterisk 3 Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/0000755000076500000240000000000011555510013023054 5ustar t0mstaffText-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/auto_link.html0000644000076500000240000000061311233534212025727 0ustar t0mstaff

    I can has autolink? http://icanhascheeseburger.com

    Ask garfield: garfield@example.com

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/auto_link.text0000644000076500000240000000013311233534212025744 0ustar t0mstaffI can has autolink? Ask garfield: Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.html0000644000076500000240000000061311233534212027731 0ustar t0mstaff

    I can has autolink? http://icanhascheeseburger.com

    Ask garfield: garfield@example.com

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.opts0000644000076500000240000000002411233534212027746 0ustar t0mstaff{'safe_mode': True} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/auto_link_safe_mode.text0000644000076500000240000000013311233534212027746 0ustar t0mstaffI can has autolink? Ask garfield: Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.html0000644000076500000240000000013111233534212027020 0ustar t0mstaff

    blah [HTML_REMOVED] blah

    [HTML_REMOVED]yowzer![HTML_REMOVED]

    blah

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.opts0000644000076500000240000000013311233534212027043 0ustar t0mstaff# Use the old (for-compat-only) way of specifying "replace" safe mode. {"safe_mode": True} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode.text0000644000076500000240000000007211233534212027044 0ustar t0mstaffblah blah
    yowzer!
    blah Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.html0000644000076500000240000000014111233534212030341 0ustar t0mstaff

    blah <img src="dangerous"> blah

    <div>yowzer!</div>

    blah

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.opts0000644000076500000240000000003011233534212030357 0ustar t0mstaff{"safe_mode": "escape"} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/basic_safe_mode_escape.text0000644000076500000240000000007211233534212030364 0ustar t0mstaffblah blah
    yowzer!
    blah Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/blockquote.html0000644000076500000240000000017711233534212026117 0ustar t0mstaff

    [Trent wrote]

    no way

    [Jeff wrote]

    way

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/blockquote.text0000644000076500000240000000005311233534212026130 0ustar t0mstaff[Trent wrote] > no way [Jeff wrote] > way Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/blockquote_with_pre.html0000644000076500000240000000031011233534212030005 0ustar t0mstaff

    Markdown indents blockquotes a couple of spaces necessitating some tweaks for pre-blocks in that blockquote:

    here is a check
    for that
    
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/blockquote_with_pre.text0000644000076500000240000000023211233534212030030 0ustar t0mstaff> Markdown indents blockquotes a couple of spaces > necessitating some tweaks for pre-blocks in that > blockquote: > > here is a check > for that Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/code_block_with_tabs.html0000644000076500000240000000017611233534212030076 0ustar t0mstaff

    Test with tabs for _Detab:

    Code    'block' with    some    "tabs"  and "quotes"
    
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/code_block_with_tabs.text0000644000076500000240000000011211233534212030104 0ustar t0mstaffTest with tabs for `_Detab`: Code 'block' with some "tabs" and "quotes" Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.html0000644000076500000240000000021611233534212027542 0ustar t0mstaff

    This is italic and this is bold. This is NOT _italic_ and this is __bold__ because --code-safe is turned on.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.opts0000644000076500000240000000003611233534212027563 0ustar t0mstaff{"extras": ["code-friendly"]} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/code_safe_emphasis.text0000644000076500000240000000016511233534212027565 0ustar t0mstaffThis is *italic* and this is **bold**. This is NOT _italic_ and this is __bold__ because --code-safe is turned on. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/codeblock.html0000644000076500000240000000015511233534212025670 0ustar t0mstaff
    some code
    

    some 'splaining

    some more code
    2 > 1
    
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/codeblock.text0000644000076500000240000000007611233534212025712 0ustar t0mstaff some code some 'splaining some more code 2 > 1 Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/codespans.html0000644000076500000240000000014311233534212025717 0ustar t0mstaff

    This is a code span. And This is one with an `embedded backtick`.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/codespans.text0000644000076500000240000000011111233534212025732 0ustar t0mstaff`This` is a code span. And ``This is one with an `embedded backtick` ``. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.html0000644000076500000240000000014311233534212027721 0ustar t0mstaff

    This is a code span. And This is one with an `embedded backtick`.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.opts0000644000076500000240000000002411233534212027740 0ustar t0mstaff{'safe_mode': True} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/codespans_safe_mode.text0000644000076500000240000000011111233534212027734 0ustar t0mstaff`This` is a code span. And ``This is one with an `embedded backtick` ``. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/emacs_head_vars.html0000644000076500000240000000025011233534212027043 0ustar t0mstaff

    This sentence talks about the Python __init__ method, which I'd rather not be interpreted as Markdown's strong.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/emacs_head_vars.text0000644000076500000240000000024111233534212027063 0ustar t0mstaff This sentence talks about the Python __init__ method, which I'd rather not be interpreted as Markdown's strong. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/emacs_tail_vars.html0000644000076500000240000000027611233534212027103 0ustar t0mstaff

    This sentence talks about the Python __init__ method, which I'd rather not be interpreted as Markdown's strong.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/emacs_tail_vars.text0000644000076500000240000000026711233534212027123 0ustar t0mstaffThis sentence talks about the Python __init__ method, which I'd rather not be interpreted as Markdown's strong. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/emphasis.html0000644000076500000240000000020211233534212025545 0ustar t0mstaff

    This is italic and this is bold. This is also italic and this is bold.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/emphasis.text0000644000076500000240000000012511233534212025571 0ustar t0mstaffThis is *italic* and this is **bold**. This is also _italic_ and this is __bold__. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/escapes.html0000644000076500000240000000006111233534212025362 0ustar t0mstaff

    **don't shout**

    *don't emphasize*

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/escapes.text0000644000076500000240000000005111233534212025401 0ustar t0mstaff\*\*don't shout\*\* \*don't emphasize\* Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes.html0000644000076500000240000000225411233534212025765 0ustar t0mstaff

    This is a para with a footnote.1

    This is another para with a footnote2 in it. Actually it has two3 of them. No, three4.


    1. Here is the body of the first footnote. 

    2. And of the second footnote.

      This one has multiple paragraphs. 

    3. Here is a footnote body that starts on next line. 

    4. quickie "that looks like a link ref if not careful" 

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes.opts0000644000076500000240000000003211233534212025776 0ustar t0mstaff{"extras": ["footnotes"]} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes.text0000644000076500000240000000057211233534212026006 0ustar t0mstaffThis is a para with a footnote.[^1] This is another para with a footnote[^2] in it. Actually it has two[^3] of them. No, three[^4]. [^1]: Here is the body of the first footnote. [^2]: And of the second footnote. This one has multiple paragraphs. [^3]: Here is a footnote body that starts on next line. [^4]: quickie "that looks like a link ref if not careful" Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.html0000644000076500000240000000175411233534212027533 0ustar t0mstaff

    This is a para with a footnote.1

    This is another para with a footnote2 in it. Actually it has two3 of them.


    1. Here is the body of the first footnote. 

    2. And of the second footnote.

      This one has multiple paragraphs. 

    3. Here is a footnote body that starts on next line. 

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.opts0000644000076500000240000000003211233534212027540 0ustar t0mstaff{"extras": ["footnotes"]} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_letters.text0000644000076500000240000000052311233534212027544 0ustar t0mstaffThis is a para with a footnote.[^foo] This is another para with a footnote[^hyphen-ated] in it. Actually it has two[^Capital] of them. [^foo]: Here is the body of the first footnote. [^hyphen-ated]: And of the second footnote. This one has multiple paragraphs. [^Capital]: Here is a footnote body that starts on next line. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.html0000644000076500000240000000144211233534212027342 0ustar t0mstaff

    This is a para with a footnote.1

    This is another para with a footnote.2


    1. And the body of the footnote has markup. For example, a link to digg. And some code:

      print "Hello, World!"
      

    2. This body has markup too, but doesn't end with a code block. 

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.opts0000644000076500000240000000003211233534212027355 0ustar t0mstaff{"extras": ["footnotes"]} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_markup.text0000644000076500000240000000045511233534212027365 0ustar t0mstaffThis is a para with a footnote.[^1] This is another para with a footnote.[^2] [^1]: And the **body** of the footnote has `markup`. For example, a [link to digg](http://digg.com). And some code: print "Hello, World!" [^2]: This body has markup too, *but* doesn't end with a code block. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.html0000644000076500000240000000072511233534212031310 0ustar t0mstaff

    This is a para with a footnote.1


    1. Here is the <em>body</em> of <span class="yo">the</span> footnote.

      <div class="blah">And here is the second para of the footnote.</div> 

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.opts0000644000076500000240000000006111233534212031322 0ustar t0mstaff{"safe_mode": "escape", "extras": ["footnotes"]} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/footnotes_safe_mode_escape.text0000644000076500000240000000027111233534212031324 0ustar t0mstaffThis is a para with a footnote.[^1] [^1]: Here is the body of the footnote.
    And here is the second para of the footnote.
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/header.html0000644000076500000240000000011111233534212025163 0ustar t0mstaff

    an h1

    an h2

    another h1

    another h2

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/header.text0000644000076500000240000000011111233534212025203 0ustar t0mstaff# an h1 ## an h2 another h1 ========== another h2 ---------- Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/hr.html0000644000076500000240000000011511233534212024350 0ustar t0mstaff

    Dashes:





    ---
    
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/hr.text0000644000076500000240000000005211233534212024370 0ustar t0mstaffDashes: --- --- --- --- --- Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/img_in_link.html0000644000076500000240000000047711233534212026231 0ustar t0mstaff

    This example from http://orestis.gr/en/blog/2007/05/28/python-markdown-problems/:

    the google logo

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/img_in_link.text0000644000076500000240000000035311233534212026242 0ustar t0mstaffThis example from : [![the google logo][logo]][google] [logo]: http://www.google.com/images/logo.gif [google]: http://www.google.com/ "click to visit Google.com" Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/inline_links.html0000644000076500000240000000035711233534212026425 0ustar t0mstaff

    an inline link

    a link "with" title

    an inline image link

    an image "with" title

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/inline_links.text0000644000076500000240000000020711233534212026437 0ustar t0mstaffan inline [link](/url/) a [link "with" title](/url/ "title") an inline ![image link](/url/) an ![image "with" title](/url/ "title") Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.html0000644000076500000240000000025611233534212031740 0ustar t0mstaff

    Heading 2

    blah [HTML_REMOVED]alert('this should be removed')[HTML_REMOVED] blah

    [HTML_REMOVED]alert('as should this')[HTML_REMOVED]

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.opts0000644000076500000240000000003111233534212031750 0ustar t0mstaff{"safe_mode": "replace"} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/issue2_safe_mode_borks_markup.text0000644000076500000240000000017011233534212031753 0ustar t0mstaff## Heading 2 blah **blah** Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_defn_alt_title_delims.html0000644000076500000240000000063011233534212031270 0ustar t0mstaff

    Alternative delimiters for link definitions are allowed -- as of Markdown 1.0.2, I think. Hence, this link and this link work too.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_defn_alt_title_delims.text0000644000076500000240000000061411233534212031312 0ustar t0mstaffAlternative delimiters for [link definitions][link1] are allowed -- as of Markdown 1.0.2, I think. Hence, [this link][link2] and [this link][link3] work too. [link1]: http://daringfireball.net/projects/markdown/syntax#link "link syntax" [link2]: http://daringfireball.net/projects/markdown/syntax#link 'link syntax' [link3]: http://daringfireball.net/projects/markdown/syntax#link (link syntax) Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns.html0000644000076500000240000000024711233534212026622 0ustar t0mstaff

    Recipe 123 and Komodo bug 234 are related.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns.opts0000644000076500000240000000036711233534212026646 0ustar t0mstaff{"extras": ["link-patterns"], "link_patterns": [ (re.compile("recipe\s+(\d+)", re.I), r"http://code.activestate.com/recipes/\1/"), (re.compile("(?:komodo\s+)?bug\s+(\d+)", re.I), r"http://bugs.activestate.com/show_bug.cgi?id=\1"), ], } Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns.text0000644000076500000240000000005311233534212026635 0ustar t0mstaffRecipe 123 and Komodo bug 234 are related. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.html0000644000076500000240000000027211233534212031016 0ustar t0mstaff

    There once was a Mozilla bug 123 and a Komodo bug 123.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.opts0000644000076500000240000000040611233534212031036 0ustar t0mstaff{"extras": ["link-patterns"], "link_patterns": [ (re.compile(r'mozilla\s+bug\s+(\d+)', re.I), r'http://bugzilla.mozilla.org/show_bug.cgi?id=\1'), (re.compile("(?:komodo\s+)?bug\s+(\d+)", re.I), r"http://bugs.activestate.com/show_bug.cgi?id=\1"), ], } Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_double_hit.text0000644000076500000240000000006711233534212031040 0ustar t0mstaffThere once was a Mozilla bug 123 and a Komodo bug 123. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.html0000644000076500000240000000014511233534212030761 0ustar t0mstaff

    Blah 123 becomes a line with two underscores.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.opts0000644000076500000240000000020611233534212031000 0ustar t0mstaff{"extras": ["link-patterns"], "link_patterns": [ (re.compile("Blah\s+(\d+)", re.I), r"http://foo.com/blah_blah_blah/\1"), ], } Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/link_patterns_edge_cases.text0000644000076500000240000000005611233534212031002 0ustar t0mstaffBlah 123 becomes a line with two underscores. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/lists.html0000644000076500000240000000022111233534212025073 0ustar t0mstaff

    count:

    • one
    • two
    • three

    count in spanish:

    1. uno
    2. dos
    3. tres
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/lists.text0000644000076500000240000000010611233534212025115 0ustar t0mstaffcount: * one * two * three count in spanish: 1. uno 2. dos 3. tres Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.html0000644000076500000240000000121211233534212030154 0ustar t0mstaff

    This is sentence has a footnote foo1 and whamo[^whamo].

    This is another para with a numbered footnote2.


    1. Here is the body of the footnote foo. 

    2. Here is the body of the footnote 6. 

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.opts0000644000076500000240000000003211233534212030174 0ustar t0mstaff{"extras": ["footnotes"]} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/mismatched_footnotes.text0000644000076500000240000000037211233534212030202 0ustar t0mstaffThis is sentence has a footnote foo[^foo] and whamo[^whamo]. This is another para with a numbered footnote[^6]. [^foo]: Here is the body of the footnote foo. [^bar]: Here is the body of the footnote bar. [^6]: Here is the body of the footnote 6. Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/missing_link_defn.html0000644000076500000240000000012711233534212027424 0ustar t0mstaff

    This is a [missing link][missing] and a used link.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/missing_link_defn.text0000644000076500000240000000015711233534212027447 0ustar t0mstaff This is a [missing link][missing] and a [used link][used]. [used]: http://foo.com [unused]: http://foo.com Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/nested_list.html0000644000076500000240000000026611233534212026263 0ustar t0mstaff

    shopping list:

    • veggies
      • carrots
      • lettuce
    • fruits
      • oranges
      • apples
      • peaches
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/nested_list.text0000644000076500000240000000015211233534212026275 0ustar t0mstaffshopping list: - veggies + carrots + lettuce - fruits + oranges + apples + *peaches* Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.html0000644000076500000240000000026611233534212030265 0ustar t0mstaff

    shopping list:

    • veggies
      • carrots
      • lettuce
    • fruits
      • oranges
      • apples
      • peaches
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.opts0000644000076500000240000000002411233534212030276 0ustar t0mstaff{'safe_mode': True} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/nested_list_safe_mode.text0000644000076500000240000000015211233534212030277 0ustar t0mstaffshopping list: - veggies + carrots + lettuce - fruits + oranges + apples + *peaches* Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/parens_in_url_4.html0000644000076500000240000000012511233534212027023 0ustar t0mstaff

    Inline link 4 with non-escaped parens.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/parens_in_url_4.text0000644000076500000240000000007711233534212027051 0ustar t0mstaff[Inline link 4 with non-escaped parens]( "title"). Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/raw_html.html0000644000076500000240000000014311233534212025555 0ustar t0mstaff

    Hi, there. blah

    **ack**
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/raw_html.text0000644000076500000240000000012611233534212025576 0ustar t0mstaff Hi, *there*. blah
    **ack**
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/ref_links.html0000644000076500000240000000014311233534212025714 0ustar t0mstaff

    Google is fast star.

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/ref_links.text0000644000076500000240000000013011233534212025730 0ustar t0mstaff[Google][] is fast ![star][]. [google]: http://www.google.com/ [star]: /img/star.png Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/sublist-para.html0000644000076500000240000000120411233534212026345 0ustar t0mstaff

    Some quick thoughts from a coder's perspective:

    • The source will be available in a Mercurial ...

    • Komodo is a Mozilla-based application...

      • Get a slightly tweaked mozilla build (C++, JavaScript, XUL).
      • Get a slightly tweaks Python build (C).
      • Add a bunch of core logic (Python)...
      • Add Komodo chrome (XUL, JavaScript, CSS, DTDs).

      What this means is that work on and add significant functionality...

    • Komodo uses the same extension mechanisms as Firefox...

    • Komodo builds and runs on Windows, Linux and ...

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/sublist-para.text0000644000076500000240000000102311233534212026364 0ustar t0mstaffSome quick thoughts from a coder's perspective: - The source will be available in a Mercurial ... - Komodo is a Mozilla-based application... - Get a slightly tweaked mozilla build (C++, JavaScript, XUL). - Get a slightly tweaks Python build (C). - Add a bunch of core logic (Python)... - Add Komodo chrome (XUL, JavaScript, CSS, DTDs). What this means is that work on and add significant functionality... - Komodo uses the same extension mechanisms as Firefox... - Komodo builds and runs on Windows, Linux and ... Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/syntax_color.html0000644000076500000240000000200211233534212026460 0ustar t0mstaff

    Here is some sample code:

    import sys
    def main(argv=sys.argv):
        logging.basicConfig()
        log.info('hi')
    

    and:

    use 'zlib'
    sub main(argv)
        puts 'hi'
    end
    
    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/syntax_color.opts0000644000076500000240000000003311233534212026503 0ustar t0mstaff{"extras": ["code-color"]} Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/syntax_color.text0000644000076500000240000000033111233534212026503 0ustar t0mstaffHere is some sample code: :::python import sys def main(argv=sys.argv): logging.basicConfig() log.info('hi') and: :::ruby use 'zlib' sub main(argv) puts 'hi' end Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/tricky_anchors.html0000644000076500000240000000062211233534212026764 0ustar t0mstaff

    with [brackets][] in text

    with [[brackets][]] in text

    full link [like](/this/) in text

    full link to img like is ok

    [only open bracket(/in/) text

    only close bracket text](/url/)

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/tricky_anchors.text0000644000076500000240000000041411233534212027003 0ustar t0mstaff[with [brackets][] in text](/url/) [with [[brackets][]] in text](/url/ "a title") [full link [like](/this/) in text](/url/) [full link to img ![like](/this/) is ok](/url/) [only open [bracket(/in/) text](/url/ 'a title') [only close bracket](/in/) text](/url/) Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/underline_in_autolink.html0000644000076500000240000000034711233534212030327 0ustar t0mstaff

    Eric wrote up a (long) intro to writing UDL definitions a while back on his blog: http://blogs.activestate.com/ericp/2007/01/kid_adding_a_ne.html

    Text-MultiMarkdown-1.000034/t/docs-pythonmarkdown2-tm-cases-pass/underline_in_autolink.text0000644000076500000240000000022411233534212030341 0ustar t0mstaffEric wrote up a (long) intro to writing UDL definitions a while back on his blog: Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/0000755000076500000240000000000011555510013020376 5ustar t0mstaffText-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Backslash_escapes.text0000644000076500000240000000157111233534212024706 0ustar t0mstaffThese should all get escaped: Backslash: \\ Backtick: \` Asterisk: \* Underscore: \_ Left brace: \{ Right brace: \} Left bracket: \[ Right bracket: \] Left paren: \( Right paren: \) Greater-than: \> Hash: \# Period: \. Bang: \! Plus: \+ Minus: \- These should not, because they occur within a code block: Backslash: \\ Backtick: \` Asterisk: \* Underscore: \_ Left brace: \{ Right brace: \} Left bracket: \[ Right bracket: \] Left paren: \( Right paren: \) Greater-than: \> Hash: \# Period: \. Bang: \! Plus: \+ Minus: \- Nor should these, which occur in code spans: Backslash: `\\` Backtick: `` \` `` Asterisk: `\*` Underscore: `\_` Left brace: `\{` Right brace: `\}` Left bracket: `\[` Right bracket: `\]` Left paren: `\(` Right paren: `\)` Greater-than: `\>` Hash: `\#` Period: `\.` Bang: `\!` Plus: `\+` Minus: `\-` Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Backslash_escapes.xhtml0000644000076500000240000000242511233534212025055 0ustar t0mstaffThese should all get escaped:

    Backslash: \

    Backtick: `

    Asterisk: *

    Underscore: _

    Left brace: {

    Right brace: }

    Left bracket: [

    Right bracket: ]

    Left paren: (

    Right paren: )

    Greater-than: >

    Hash: #

    Period: .

    Bang: !

    Plus: +

    Minus: -

    These should not, because they occur within a code block:

    Backslash: \\
    
    Backtick: \`
    
    Asterisk: \*
    
    Underscore: \_
    
    Left brace: \{
    
    Right brace: \}
    
    Left bracket: \[
    
    Right bracket: \]
    
    Left paren: \(
    
    Right paren: \)
    
    Greater-than: \>
    
    Hash: \#
    
    Period: \.
    
    Bang: \!
    
    Plus: \+
    
    Minus: \-
    

    Nor should these, which occur in code spans:

    Backslash: \\

    Backtick: \`

    Asterisk: \*

    Underscore: \_

    Left brace: \{

    Right brace: \}

    Left bracket: \[

    Right bracket: \]

    Left paren: \(

    Right paren: \)

    Greater-than: \>

    Hash: \#

    Period: \.

    Bang: \!

    Plus: \+

    Minus: \-

    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Footnotes.text0000644000076500000240000000006211233534212023262 0ustar t0mstaff Test footnote.[^1][]. [^1]: This is a footnote. Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Footnotes.xhtml0000644000076500000240000000035411233534212023436 0ustar t0mstaff

    Test footnote.1[].


    1. This is a footnote. ↩

    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Inline_HTML_(Advanced).text0000644000076500000240000000020611233534212025252 0ustar t0mstaffSimple block on one line:
    foo
    And nested without indentation:
    foo
    bar
    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Inline_HTML_(Advanced).xhtml0000644000076500000240000000022311233534212025421 0ustar t0mstaffSimple block on one line:
    foo

    And nested without indentation:

    foo
    bar
    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Inline_HTML_(Simple).text0000644000076500000240000000105111233534212024775 0ustar t0mstaffHere's a simple block:
    foo
    This should be a code block, though:
    foo
    As should this:
    foo
    Now, nested:
    foo
    This should just be an HTML comment: Multiline: Code block: Just plain comment, with trailing spaces on the line: Code:
    Hr's:








    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Inline_HTML_(Simple).xhtml0000644000076500000240000000142011233534212025145 0ustar t0mstaff

    Here's a simple block:

    foo

    This should be a code block, though:

    <div>
        foo
    </div>
    

    As should this:

    <div>foo</div>
    

    Now, nested:

    foo

    This should just be an HTML comment:

    Multiline:

    Code block:

    <!-- Comment -->
    

    Just plain comment, with trailing spaces on the line:

    Code:

    <hr />
    

    Hr's:










    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Inline_HTML_comments.text0000644000076500000240000000024411233534212025253 0ustar t0mstaffParagraph one. Paragraph two. The end. Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Inline_HTML_comments.xhtml0000644000076500000240000000027411233534212025426 0ustar t0mstaff

    Paragraph one.

    Paragraph two.

    The end.

    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Links_inline_style.text0000644000076500000240000000025611233534212025145 0ustar t0mstaffJust a [URL](/url/). [URL and title](/url/ "title"). [URL and title](/url/ "title preceded by two spaces"). [URL and title](/url/ "title preceded by a tab"). [Empty](). Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Links_inline_style.xhtml0000644000076500000240000000043111233534212025310 0ustar t0mstaff

    Just a URL.

    URL and title.

    URL and title.

    URL and title.

    Empty.

    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Links_reference_style.text0000644000076500000240000000042111233534212025617 0ustar t0mstaffFoo [bar] [1]. Foo [bar][1]. Foo [bar] [1]. [1]: /url/ "Title" With [embedded [brackets]] [b]. Indented [once][]. Indented [twice][]. Indented [thrice][]. Indented [four][] times. [once]: /url [twice]: /url [thrice]: /url [four]: /url [b]: /url/ Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Links_reference_style.xhtml0000644000076500000240000000062711233534212025777 0ustar t0mstaff

    Foo bar.

    Foo bar.

    Foo bar.

    With embedded [brackets].

    Indented once.

    Indented twice.

    Indented thrice.

    Indented [four][] times.

    [four]: /url
    
    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Literal_quotes_in_titles.text0000644000076500000240000000015411233534212026352 0ustar t0mstaffFoo [bar][]. Foo [bar](/url/ "Title with "quotes" inside"). [bar]: /url/ "Title with "quotes" inside" Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Literal_quotes_in_titles.xhtml0000644000076500000240000000024311233534212026521 0ustar t0mstaff

    Foo bar.

    Foo bar.

    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Nested_blockquotes.text0000644000076500000240000000003011233534212025132 0ustar t0mstaff> foo > > > bar > > foo Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Nested_blockquotes.xhtml0000644000076500000240000000015111233534212025306 0ustar t0mstaff

    foo

    bar

    foo

    Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Ordered_and_unordered_lists.text0000644000076500000240000000151111233534212026775 0ustar t0mstaff## Unordered Asterisks tight: * asterisk 1 * asterisk 2 * asterisk 3 Asterisks loose: * asterisk 1 * asterisk 2 * asterisk 3 * * * Pluses tight: + Plus 1 + Plus 2 + Plus 3 Pluses loose: + Plus 1 + Plus 2 + Plus 3 * * * Minuses tight: - Minus 1 - Minus 2 - Minus 3 Minuses loose: - Minus 1 - Minus 2 - Minus 3 ## Ordered Tight: 1. First 2. Second 3. Third and: 1. One 2. Two 3. Three Loose using tabs: 1. First 2. Second 3. Third and using spaces: 1. One 2. Two 3. Three Multiple paragraphs: 1. Item 1, graf one. Item 2. graf two. The quick brown fox jumped over the lazy dog's back. 2. Item 2. 3. Item 3. ## Nested * Tab * Tab * Tab Here's another: 1. First 2. Second: * Fee * Fie * Foe 3. Third Same thing but with paragraphs: 1. First 2. Second: * Fee * Fie * Foe 3. Third Text-MultiMarkdown-1.000034/t/MultiMarkdown.mdtest/Ordered_and_unordered_lists.xhtml0000644000076500000240000000312211233534212027145 0ustar t0mstaff

    Unordered

    Asterisks tight:

    • asterisk 1
    • asterisk 2
    • asterisk 3

    Asterisks loose:

    • asterisk 1

    • asterisk 2

    • asterisk 3


    Pluses tight:

    • Plus 1
    • Plus 2
    • Plus 3

    Pluses loose:

    • Plus 1

    • Plus 2

    • Plus 3


    Minuses tight:

    • Minus 1
    • Minus 2
    • Minus 3

    Minuses loose:

    • Minus 1

    • Minus 2

    • Minus 3

    Ordered

    Tight:

    1. First
    2. Second
    3. Third

    and:

    1. One
    2. Two
    3. Three

    Loose using tabs:

    1. First

    2. Second

    3. Third

    and using spaces:

    1. One

    2. Two

    3. Three

    Multiple paragraphs:

    1. Item 1, graf one.

      Item 2. graf two. The quick brown fox jumped over the lazy dog's back.

    2. Item 2.

    3. Item 3.

    Nested

    • Tab
      • Tab
        • Tab

    Here's another:

    1. First
    2. Second:
      • Fee
      • Fie
      • Foe
    3. Third

    Same thing but with paragraphs:

    1. First

    2. Second:

      • Fee
      • Fie
      • Foe
    3. Third

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/0000755000076500000240000000000011555510013021320 5ustar t0mstaffText-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Amps_and_angle_encoding.html0000644000076500000240000000112011233534212026736 0ustar t0mstaff

    AT&T has an ampersand in their name.

    AT&T is another way to write it.

    This & that.

    4 < 5.

    6 > 5.

    Here's a link with an ampersand in the URL.

    Here's a link with an amersand in the link text: AT&T.

    Here's an inline link.

    Here's an inline link.

    But this <<is>>.
    

    As is << this>>/.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Amps_and_angle_encoding.text0000644000076500000240000000064411233534212026770 0ustar t0mstaffAT&T has an ampersand in their name. AT&T is another way to write it. This & that. 4 < 5. 6 > 5. Here's a [link] [1] with an ampersand in the URL. Here's a link with an amersand in the link text: [AT&T] [2]. Here's an inline [link](/script?foo=1&bar=2). Here's an inline [link](). [1]: http://example.com/?foo=1&bar=2 [2]: http://att.com/ "AT&T" But this <>. As is << this>>/. Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Amps_and_angles_encoding-advanced.text0000644000076500000240000000031711233534212030713 0ustar t0mstaffTest bare block & < > Test

    Test HTML block & < > Test

    A larger bare block footer Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Amps_and_angles_encoding-advanced.xhtml0000644000076500000240000000035311233534212031063 0ustar t0mstaff

    Test bare block & < > Test

    Test HTML block & < > Test

    A larger bare block

    footer

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Auto_links.text0000644000076500000240000000041011233534212024331 0ustar t0mstaff Link: . With an ampersand: * In a list? * * It should. > Blockquoted: Auto-links should not occur here: `` or here: Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Auto_links.xhtml0000644000076500000240000000104211233534212024503 0ustar t0mstaff

    Link: http://example.com/.

    With an ampersand: http://example.com/?foo=1&bar=2

    Blockquoted: http://example.com/

    Auto-links should not occur here: <http://example.com/>

    or here: <http://example.com/>
    
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Backslash_escapes.html0000644000076500000240000000242611233534212025610 0ustar t0mstaff

    These should all get escaped:

    Backslash: \

    Backtick: `

    Asterisk: *

    Underscore: _

    Left brace: {

    Right brace: }

    Left bracket: [

    Right bracket: ]

    Left paren: (

    Right paren: )

    Greater-than: >

    Hash: #

    Period: .

    Bang: !

    Plus: +

    Minus: -

    These should not, because they occur within a code block:

    Backslash: \\
    
    Backtick: \`
    
    Asterisk: \*
    
    Underscore: \_
    
    Left brace: \{
    
    Right brace: \}
    
    Left bracket: \[
    
    Right bracket: \]
    
    Left paren: \(
    
    Right paren: \)
    
    Greater-than: \>
    
    Hash: \#
    
    Period: \.
    
    Bang: \!
    
    Plus: \+
    
    Minus: \-
    

    Nor should these, which occur in code spans:

    Backslash: \\

    Backtick: \`

    Asterisk: \*

    Underscore: \_

    Left brace: \{

    Right brace: \}

    Left bracket: \[

    Right bracket: \]

    Left paren: \(

    Right paren: \)

    Greater-than: \>

    Hash: \#

    Period: \.

    Bang: \!

    Plus: \+

    Minus: \-

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Backslash_escapes.text0000644000076500000240000000157211233534212025631 0ustar t0mstaff These should all get escaped: Backslash: \\ Backtick: \` Asterisk: \* Underscore: \_ Left brace: \{ Right brace: \} Left bracket: \[ Right bracket: \] Left paren: \( Right paren: \) Greater-than: \> Hash: \# Period: \. Bang: \! Plus: \+ Minus: \- These should not, because they occur within a code block: Backslash: \\ Backtick: \` Asterisk: \* Underscore: \_ Left brace: \{ Right brace: \} Left bracket: \[ Right bracket: \] Left paren: \( Right paren: \) Greater-than: \> Hash: \# Period: \. Bang: \! Plus: \+ Minus: \- Nor should these, which occur in code spans: Backslash: `\\` Backtick: `` \` `` Asterisk: `\*` Underscore: `\_` Left brace: `\{` Right brace: `\}` Left bracket: `\[` Right bracket: `\]` Left paren: `\(` Right paren: `\)` Greater-than: `\>` Hash: `\#` Period: `\.` Bang: `\!` Plus: `\+` Minus: `\-` Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Blockquotes_with_code_blocks.html0000644000076500000240000000027211233534212030064 0ustar t0mstaff

    Example:

    sub status {
        print "working";
    }
    

    Or:

    sub status {
        return "working";
    }
    
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Blockquotes_with_code_blocks.text0000644000076500000240000000020711233534212030102 0ustar t0mstaff> Example: > > sub status { > print "working"; > } > > Or: > > sub status { > return "working"; > } Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Citations.text0000644000076500000240000000146111262570567024204 0ustar t0mstaff Handle MultiMarkdown-style citations. This is a borrowed idea[p. 23][#Doe:1996]. > This is a cited blockquote without a page reference.[][#Smith:2005]. And a plain paragraph. And a code block that is not a citation: This is not a citation[p. 5][#Doe:1996]. And a work by Johnson that is not cited, but should be included in bibliography: [Not cited][#Johnson:1996] And multiple citations.[p. 3][#Doe:1996][p. 10][#Smith:2005] How about a citation within a footnote? [^footcite] [#Smith:2005]: James Smith. Some interesting paper. *Some Journal*, 1(2): 101-123, 2005. [#Doe:1996]: John Doe. *Some Book*. Blog Books, 1996. [#Johnson:1996]: Bill Johnson. *Some Book*. Blog Books, 1996. [#James:1996]: John James. *Some Book*. Blog Books, 1996. [^footcite]: As described previously. [p. 12][#Smith:2005]Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Citations.xhtml0000644000076500000240000000323211262570567024352 0ustar t0mstaff

    Handle MultiMarkdown-style citations.

    This is a borrowed idea (1, p. 23).

    This is a cited blockquote without a page reference. (2).

    And a plain paragraph.

    And a code block that is not a citation:

    This is not a citation[p. 5][#Doe:1996].
    

    And a work by Johnson that is not cited, but should be included in bibliography:

    And multiple citations. (1, p. 3) (2, p. 10)

    How about a citation within a footnote? 1


    1. As described previously. (2, p. 12) ↩


    Bibliography

    [1] John Doe. Some Book. Blog Books, 1996.

    [2] James Smith. Some interesting paper. Some Journal, 1(2): 101-123, 2005.

    [3] Bill Johnson. Some Book. Blog Books, 1996.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/complex_escaping.text0000644000076500000240000000007411233534212025547 0ustar t0mstaff What do you see here? `\\` it should be two backslashes. Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/complex_escaping.xhtml0000644000076500000240000000011411233534212025712 0ustar t0mstaff

    What do you see here? \\ it should be two backslashes.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Cross-References.text0000644000076500000240000000024011233534212025372 0ustar t0mstaff# Special Cross Reference Cases # ## Cross-References: Special Characters!@#$%^&*()<> ## And now, link to [Cross-References: Special Characters!@#$%^&*()<>][]Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Cross-References.xhtml0000644000076500000240000000056411233534212025553 0ustar t0mstaff

    Special Cross Reference Cases

    Cross-References: Special Characters!@#$%^&*()<>

    And now, link to Cross-References: Special Characters!@#$%^&*()<>

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Emphasis.text0000644000076500000240000000026211233534212023777 0ustar t0mstaff_M*A*S*H_ here I am going with original Markdown.. foo_bar_bas I am going with PHP Markdown Extra here (by default, there is an option for original style behavior - see docs).. Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Emphasis.xhtml0000644000076500000240000000030711233534212024147 0ustar t0mstaff

    M*A*S*H here I am going with original Markdown..

    foo_bar_bas I am going with PHP Markdown Extra here (by default, there is an option for original style behavior - see docs)..

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Footnotes.text0000644000076500000240000000106211233534212024205 0ustar t0mstaffHere is some text containing a footnote.[^somesamplefootnote] > And here is a footnote within a blockquote, should be labelled #2.[^secondnote] And this is a codeblock, that should not be a footnote: This is code.[^somesamplefootnote] And this is a short footnote for testing.[^shortnote] Test footnote, with a 2nd link part.[^1][]. [^somesamplefootnote]: Here is the text of the footnote itself. It also has a [link][somesamplefootnote]. [somesamplefootnote]:http://somelink.com [^secondnote]: Note # 2. [^shortnote]: Finis [^1]: This is a footnote. Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Footnotes.xhtml0000644000076500000240000000233511233534212024361 0ustar t0mstaff

    Here is some text containing a footnote.1

    And here is a footnote within a blockquote, should be labelled #2.2

    And this is a codeblock, that should not be a footnote:

    This is code.[^somesamplefootnote]
    

    And this is a short footnote for testing.3

    Test footnote, with a 2nd link part.4[].


    1. Here is the text of the footnote itself. It also has a link. ↩

    2. Note # 2. ↩

    3. Finis ↩

    4. This is a footnote. ↩

    ././@LongLink0000000000000000000000000000015200000000000011704 Lustar rootwheelText-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Hard-wrapped_paragraphs_with_list-like_lines.textText-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Hard-wrapped_paragraphs_with_list-like_lines0000644000076500000240000000030511233534212032171 0ustar t0mstaffIn Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item. Here's one with a bullet. * criminey. ././@LongLink0000000000000000000000000000015300000000000011705 Lustar rootwheelText-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Hard-wrapped_paragraphs_with_list-like_lines.xhtmlText-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Hard-wrapped_paragraphs_with_list-like_lines0000644000076500000240000000032311233534212032171 0ustar t0mstaff

    In Markdown 1.0.0 and earlier. Version 8. This line turns into a list item. Because a hard-wrapped line in the middle of a paragraph looked like a list item.

    Here's one with a bullet. * criminey.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Horizontal_rules.text0000644000076500000240000000041711233534212025573 0ustar t0mstaff Dashes: --- --- --- --- --- - - - - - - - - - - - - - - - Asterisks: *** *** *** *** *** * * * * * * * * * * * * * * * Underscores: ___ ___ ___ ___ ___ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Horizontal_rules.xhtml0000644000076500000240000000066111233534212025744 0ustar t0mstaff

    Dashes:





    ---
    




    - - -
    

    Asterisks:





    ***
    




    * * *
    

    Underscores:





    ___
    




    _ _ _
    
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/HTML-Comment-encoding.text0000644000076500000240000000042711233534212026161 0ustar t0mstaffA markdown paragraph with a comment that *will* be processed by original Markdown. However MultiMarkdown and Pandoc do not convert the & sigil in the comment.. A paragraph

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/HTML-Comment-encoding.xhtml0000644000076500000240000000046011233534212026326 0ustar t0mstaff

    A markdown paragraph with a comment that will be processed by original Markdown. However MultiMarkdown and Pandoc do not convert the & sigil in the comment..

    A paragraph

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Images.text0000644000076500000240000000064611233534212023441 0ustar t0mstaffThis is a test of image features. And now a link to the first [image][], and the [second][another image]. Here is an image: ![image][] And another: ![another image][another] And now a link to the first [image][], and the [second][another image]. [image]: http://some.source.com/image.jpg "Image Title" width=500px height=50px [another]: http://some.source.com/image.jpg "Another Title" width="500px" height="50px" Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Images.xhtml0000644000076500000240000000123511233534212023604 0ustar t0mstaff

    This is a test of image features.

    And now a link to the first image, and the second.

    Here is an image:

    image

    And another:

    another image

    And now a link to the first image, and the second.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Inline_HTML_(Advanced).text0000644000076500000240000000020711233534212026175 0ustar t0mstaff Simple block on one line:
    foo
    And nested without indentation:
    foo
    bar
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Inline_HTML_(Advanced).xhtml0000644000076500000240000000022411233534212026344 0ustar t0mstaff

    Simple block on one line:

    foo

    And nested without indentation:

    foo
    bar
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Inline_HTML_(Simple).text0000644000076500000240000000105111233534212025717 0ustar t0mstaffHere's a simple block:
    foo
    This should be a code block, though:
    foo
    As should this:
    foo
    Now, nested:
    foo
    This should just be an HTML comment: Multiline: Code block: Just plain comment, with trailing spaces on the line: Code:
    Hr's:








    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Inline_HTML_(Simple).xhtml0000644000076500000240000000142011233534212026067 0ustar t0mstaff

    Here's a simple block:

    foo

    This should be a code block, though:

    <div>
        foo
    </div>
    

    As should this:

    <div>foo</div>
    

    Now, nested:

    foo

    This should just be an HTML comment:

    Multiline:

    Code block:

    <!-- Comment -->
    

    Just plain comment, with trailing spaces on the line:

    Code:

    <hr />
    

    Hr's:










    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Inline_HTML_comments.text0000644000076500000240000000024411233534212026175 0ustar t0mstaffParagraph one. Paragraph two. The end. Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Inline_HTML_comments.xhtml0000644000076500000240000000027411233534212026350 0ustar t0mstaff

    Paragraph one.

    Paragraph two.

    The end.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Link_Attributes.text0000644000076500000240000000037511233534212025336 0ustar t0mstaffThis is a formatted ![image][] and a [link][] with attributes. [image]: http://path.to/image "Image title" width=40px height=400px Some non-link text. [link]: http://path.to/link.html "Some Link" class=external style="border: solid black 1px;" Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Link_Attributes.xhtml0000644000076500000240000000045011233534212025500 0ustar t0mstaff

    This is a formatted image and a link with attributes.

    Some non-link text.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_brackets.text0000644000076500000240000000016711233534212025170 0ustar t0mstaff[ZIP archives](http://en.wikipedia.org/wiki/ZIP_(file_format) "ZIP (file format) - Wikipedia, the free encyclopedia") Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_brackets.xhtml0000644000076500000240000000021611233534212025333 0ustar t0mstaff

    ZIP archives

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_inline_style.text0000644000076500000240000000025611233534212026067 0ustar t0mstaffJust a [URL](/url/). [URL and title](/url/ "title"). [URL and title](/url/ "title preceded by two spaces"). [URL and title](/url/ "title preceded by a tab"). [Empty](). Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_inline_style.xhtml0000644000076500000240000000043111233534212026232 0ustar t0mstaff

    Just a URL.

    URL and title.

    URL and title.

    URL and title.

    Empty.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_1.html0000644000076500000240000000017411233534212026612 0ustar t0mstaff

    http://bugs.debian.org/459885

    link text

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_1.text0000644000076500000240000000011611233534212026626 0ustar t0mstaff [link text] [link id] [link id]: /someurl/ Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_2.html0000644000076500000240000000031411233534212026607 0ustar t0mstaff

    http://bugs.debian.org/459885

    Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla bla. This is my
    University
    .

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_multiline_bugs_2.text0000644000076500000240000000023111233534212026625 0ustar t0mstaff Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla bla. This is [my University][]. [my university]: http://www.ua.es Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_reference_style.text0000644000076500000240000000112511233534212026543 0ustar t0mstaffFoo [bar] [1]. Foo [bar][1]. Foo [bar] [1]. [1]: /url/ "Title" With [embedded [brackets]] [b]. Indented [once][]. Indented [twice][]. Indented [thrice][]. Indented [four][] times. [once]: /url [twice]: /url [thrice]: /url [four]: /url [b]: /url/ More multi line edge cases. First a broken link id [link text] [link id] [link id]: /someurl/ Then a line with 2 chars of trailing whitespace and a line break [my University][]. The a shortcut reference link with 2 chars of trailing whitespace and a line break [my University]. [my university]: http://www.ua.esText-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Links_reference_style.xhtml0000644000076500000240000000141311233534212026713 0ustar t0mstaff

    Foo bar.

    Foo bar.

    Foo bar.

    With embedded [brackets].

    Indented once.

    Indented twice.

    Indented thrice.

    Indented [four][] times.

    [four]: /url
    

    More multi line edge cases. First a broken link id

    link text

    Then a line with 2 chars of trailing whitespace and a line break my
    University
    .

    The a shortcut reference link with 2 chars of trailing whitespace and a line break my
    University
    .

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Lists-multilevel-md5-edgecase.text0000644000076500000240000000022211233534212027721 0ustar t0mstaff# text1 * text2 * text3 text4 ## text5 * text6 * text7 text8 ## text9 * text10 * text11 text12 text13 Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Lists-multilevel-md5-edgecase.xhtml0000644000076500000240000000050311233534212030073 0ustar t0mstaff

    text1

    • text2

      • text3

      text4

    text5

    • text6

      • text7

      text8

    text9

    • text10

      • text11

      text12

      text13

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Lists.text0000644000076500000240000000021511233534212023322 0ustar t0mstaffIntroduction. 1. item with multiple paragraphs 1. Sublist 2. Item And a continuation of first item in main list. 2. second item.Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Lists.xhtml0000644000076500000240000000034411233534212023475 0ustar t0mstaff

    Introduction.

    1. item with multiple

      paragraphs

      1. Sublist

      2. Item

      And a continuation of first item in main list.

    2. second item.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Literal_quotes_in_titles.text0000644000076500000240000000015411233534212027274 0ustar t0mstaffFoo [bar][]. Foo [bar](/url/ "Title with "quotes" inside"). [bar]: /url/ "Title with "quotes" inside" Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Literal_quotes_in_titles.xhtml0000644000076500000240000000024311233534212027443 0ustar t0mstaff

    Foo bar.

    Foo bar.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Basics.text0000644000076500000240000001760111233534212030406 0ustar t0mstaff Markdown: Basics ================ Getting the Gist of Markdown's Formatting Syntax ------------------------------------------------ This page offers a brief overview of what it's like to use Markdown. The [syntax page] [s] provides complete, detailed documentation for every feature, but Markdown should be very easy to pick up simply by looking at a few examples of it in action. The examples on this page are written in a before/after style, showing example syntax and the HTML output produced by Markdown. It's also helpful to simply try Markdown out; the [Dingus] [d] is a web application that allows you type your own Markdown-formatted text and translate it to XHTML. **Note:** This document is itself written using Markdown; you can [see the source for it by adding '.text' to the URL] [src]. [s]: /projects/markdown/syntax "Markdown Syntax" [d]: /projects/markdown/dingus "Markdown Dingus" [src]: /projects/markdown/basics.text ## Paragraphs, Headers, Blockquotes ## A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines. (A blank line is any line that looks like a blank line -- a line containing nothing spaces or tabs is considered blank.) Normal paragraphs should not be intended with spaces or tabs. Markdown offers two styles of headers: *Setext* and *atx*. Setext-style headers for `

    ` and `

    ` are created by "underlining" with equal signs (`=`) and hyphens (`-`), respectively. To create an atx-style header, you put 1-6 hash marks (`#`) at the beginning of the line -- the number of hashes equals the resulting HTML header level. Blockquotes are indicated using email-style '`>`' angle brackets. Markdown: A First Level Header ==================== A Second Level Header --------------------- Now is the time for all good men to come to the aid of their country. This is just a regular paragraph. The quick brown fox jumped over the lazy dog's back. ### Header 3 > This is a blockquote. > > This is the second paragraph in the blockquote. > > ## This is an H2 in a blockquote Output:

    A First Level Header

    A Second Level Header

    Now is the time for all good men to come to the aid of their country. This is just a regular paragraph.

    The quick brown fox jumped over the lazy dog's back.

    Header 3

    This is a blockquote.

    This is the second paragraph in the blockquote.

    This is an H2 in a blockquote

    ### Phrase Emphasis ### Markdown uses asterisks and underscores to indicate spans of emphasis. Markdown: Some of these words *are emphasized*. Some of these words _are emphasized also_. Use two asterisks for **strong emphasis**. Or, if you prefer, __use two underscores instead__. Output:

    Some of these words are emphasized. Some of these words are emphasized also.

    Use two asterisks for strong emphasis. Or, if you prefer, use two underscores instead.

    ## Lists ## Unordered (bulleted) lists use asterisks, pluses, and hyphens (`*`, `+`, and `-`) as list markers. These three markers are interchangable; this: * Candy. * Gum. * Booze. this: + Candy. + Gum. + Booze. and this: - Candy. - Gum. - Booze. all produce the same output:
    • Candy.
    • Gum.
    • Booze.
    Ordered (numbered) lists use regular numbers, followed by periods, as list markers: 1. Red 2. Green 3. Blue Output:
    1. Red
    2. Green
    3. Blue
    If you put blank lines between items, you'll get `

    ` tags for the list item text. You can create multi-paragraph list items by indenting the paragraphs by 4 spaces or 1 tab: * A list item. With multiple paragraphs. * Another item in the list. Output:

    • A list item.

      With multiple paragraphs.

    • Another item in the list.

    ### Links ### Markdown supports two styles for creating links: *inline* and *reference*. With both styles, you use square brackets to delimit the text you want to turn into a link. Inline-style links use parentheses immediately after the link text. For example: This is an [example link](http://example.com/). Output:

    This is an example link.

    Optionally, you may include a title attribute in the parentheses: This is an [example link](http://example.com/ "With a Title"). Output:

    This is an example link.

    Reference-style links allow you to refer to your links by names, which you define elsewhere in your document: I get 10 times more traffic from [Google][1] than from [Yahoo][2] or [MSN][3]. [1]: http://google.com/ "Google" [2]: http://search.yahoo.com/ "Yahoo Search" [3]: http://search.msn.com/ "MSN Search" Output:

    I get 10 times more traffic from Google than from Yahoo or MSN.

    The title attribute is optional. Link names may contain letters, numbers and spaces, but are *not* case sensitive: I start my morning with a cup of coffee and [The New York Times][NY Times]. [ny times]: http://www.nytimes.com/ Output:

    I start my morning with a cup of coffee and The New York Times.

    ### Images ### Image syntax is very much like link syntax. Inline (titles are optional): ![alt text](/path/to/img.jpg "Title") Reference-style: ![alt text][id] [id]: /path/to/img.jpg "Title" Both of the above examples produce the same output: alt text ### Code ### In a regular paragraph, you can create code span by wrapping text in backtick quotes. Any ampersands (`&`) and angle brackets (`<` or `>`) will automatically be translated into HTML entities. This makes it easy to use Markdown to write about HTML example code: I strongly recommend against using any `` tags. I wish SmartyPants used named entities like `—` instead of decimal-encoded entites like `—`. Output:

    I strongly recommend against using any <blink> tags.

    I wish SmartyPants used named entities like &mdash; instead of decimal-encoded entites like &#8212;.

    To specify an entire block of pre-formatted code, indent every line of the block by 4 spaces or 1 tab. Just like with code spans, `&`, `<`, and `>` characters will be escaped automatically. Markdown: If you want your page to validate under XHTML 1.0 Strict, you've got to put paragraph tags in your blockquotes:

    For example.

    Output:

    If you want your page to validate under XHTML 1.0 Strict, you've got to put paragraph tags in your blockquotes:

    <blockquote>
            <p>For example.</p>
        </blockquote>
        
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Basics.xhtml0000644000076500000240000002251711233534212030560 0ustar t0mstaff

    Markdown: Basics

    Getting the Gist of Markdown's Formatting Syntax

    This page offers a brief overview of what it's like to use Markdown. The syntax page provides complete, detailed documentation for every feature, but Markdown should be very easy to pick up simply by looking at a few examples of it in action. The examples on this page are written in a before/after style, showing example syntax and the HTML output produced by Markdown.

    It's also helpful to simply try Markdown out; the Dingus is a web application that allows you type your own Markdown-formatted text and translate it to XHTML.

    Note: This document is itself written using Markdown; you can see the source for it by adding '.text' to the URL.

    Paragraphs, Headers, Blockquotes

    A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines. (A blank line is any line that looks like a blank line -- a line containing nothing spaces or tabs is considered blank.) Normal paragraphs should not be intended with spaces or tabs.

    Markdown offers two styles of headers: Setext and atx. Setext-style headers for <h1> and <h2> are created by "underlining" with equal signs (=) and hyphens (-), respectively. To create an atx-style header, you put 1-6 hash marks (#) at the beginning of the line -- the number of hashes equals the resulting HTML header level.

    Blockquotes are indicated using email-style '>' angle brackets.

    Markdown:

    A First Level Header
    ====================
    
    A Second Level Header
    ---------------------
    
    Now is the time for all good men to come to
    the aid of their country. This is just a
    regular paragraph.
    
    The quick brown fox jumped over the lazy
    dog's back.
    
    ### Header 3
    
    > This is a blockquote.
    > 
    > This is the second paragraph in the blockquote.
    >
    > ## This is an H2 in a blockquote
    

    Output:

    <h1>A First Level Header</h1>
    
    <h2>A Second Level Header</h2>
    
    <p>Now is the time for all good men to come to
    the aid of their country. This is just a
    regular paragraph.</p>
    
    <p>The quick brown fox jumped over the lazy
    dog's back.</p>
    
    <h3>Header 3</h3>
    
    <blockquote>
        <p>This is a blockquote.</p>
    
        <p>This is the second paragraph in the blockquote.</p>
    
        <h2>This is an H2 in a blockquote</h2>
    </blockquote>
    

    Phrase Emphasis

    Markdown uses asterisks and underscores to indicate spans of emphasis.

    Markdown:

    Some of these words *are emphasized*.
    Some of these words _are emphasized also_.
    
    Use two asterisks for **strong emphasis**.
    Or, if you prefer, __use two underscores instead__.
    

    Output:

    <p>Some of these words <em>are emphasized</em>.
    Some of these words <em>are emphasized also</em>.</p>
    
    <p>Use two asterisks for <strong>strong emphasis</strong>.
    Or, if you prefer, <strong>use two underscores instead</strong>.</p>
    

    Lists

    Unordered (bulleted) lists use asterisks, pluses, and hyphens (*, +, and -) as list markers. These three markers are interchangable; this:

    *   Candy.
    *   Gum.
    *   Booze.
    

    this:

    +   Candy.
    +   Gum.
    +   Booze.
    

    and this:

    -   Candy.
    -   Gum.
    -   Booze.
    

    all produce the same output:

    <ul>
    <li>Candy.</li>
    <li>Gum.</li>
    <li>Booze.</li>
    </ul>
    

    Ordered (numbered) lists use regular numbers, followed by periods, as list markers:

    1.  Red
    2.  Green
    3.  Blue
    

    Output:

    <ol>
    <li>Red</li>
    <li>Green</li>
    <li>Blue</li>
    </ol>
    

    If you put blank lines between items, you'll get <p> tags for the list item text. You can create multi-paragraph list items by indenting the paragraphs by 4 spaces or 1 tab:

    *   A list item.
    
        With multiple paragraphs.
    
    *   Another item in the list.
    

    Output:

    <ul>
    <li><p>A list item.</p>
    <p>With multiple paragraphs.</p></li>
    <li><p>Another item in the list.</p></li>
    </ul>
    

    Markdown supports two styles for creating links: inline and reference. With both styles, you use square brackets to delimit the text you want to turn into a link.

    Inline-style links use parentheses immediately after the link text. For example:

    This is an [example link](http://example.com/).
    

    Output:

    <p>This is an <a href="http://example.com/">
    example link</a>.</p>
    

    Optionally, you may include a title attribute in the parentheses:

    This is an [example link](http://example.com/ "With a Title").
    

    Output:

    <p>This is an <a href="http://example.com/" title="With a Title">
    example link</a>.</p>
    

    Reference-style links allow you to refer to your links by names, which you define elsewhere in your document:

    I get 10 times more traffic from [Google][1] than from
    [Yahoo][2] or [MSN][3].
    
    [1]: http://google.com/        "Google"
    [2]: http://search.yahoo.com/  "Yahoo Search"
    [3]: http://search.msn.com/    "MSN Search"
    

    Output:

    <p>I get 10 times more traffic from <a href="http://google.com/"
    title="Google">Google</a> than from <a href="http://search.yahoo.com/"
    title="Yahoo Search">Yahoo</a> or <a href="http://search.msn.com/"
    title="MSN Search">MSN</a>.</p>
    

    The title attribute is optional. Link names may contain letters, numbers and spaces, but are not case sensitive:

    I start my morning with a cup of coffee and
    [The New York Times][NY Times].
    
    [ny times]: http://www.nytimes.com/
    

    Output:

    <p>I start my morning with a cup of coffee and
    <a href="http://www.nytimes.com/">The New York Times</a>.</p>
    

    Images

    Image syntax is very much like link syntax.

    Inline (titles are optional):

    ![alt text](/path/to/img.jpg "Title")
    

    Reference-style:

    ![alt text][id]
    
    [id]: /path/to/img.jpg "Title"
    

    Both of the above examples produce the same output:

    <img src="/path/to/img.jpg" alt="alt text" title="Title" />
    

    Code

    In a regular paragraph, you can create code span by wrapping text in backtick quotes. Any ampersands (&) and angle brackets (< or >) will automatically be translated into HTML entities. This makes it easy to use Markdown to write about HTML example code:

    I strongly recommend against using any `<blink>` tags.
    
    I wish SmartyPants used named entities like `&mdash;`
    instead of decimal-encoded entites like `&#8212;`.
    

    Output:

    <p>I strongly recommend against using any
    <code>&lt;blink&gt;</code> tags.</p>
    
    <p>I wish SmartyPants used named entities like
    <code>&amp;mdash;</code> instead of decimal-encoded
    entites like <code>&amp;#8212;</code>.</p>
    

    To specify an entire block of pre-formatted code, indent every line of the block by 4 spaces or 1 tab. Just like with code spans, &, <, and > characters will be escaped automatically.

    Markdown:

    If you want your page to validate under XHTML 1.0 Strict,
    you've got to put paragraph tags in your blockquotes:
    
        <blockquote>
            <p>For example.</p>
        </blockquote>
    

    Output:

    <p>If you want your page to validate under XHTML 1.0 Strict,
    you've got to put paragraph tags in your blockquotes:</p>
    
    <pre><code>&lt;blockquote&gt;
        &lt;p&gt;For example.&lt;/p&gt;
    &lt;/blockquote&gt;
    </code></pre>
    
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Syntax.text0000644000076500000240000006544511233534212030501 0ustar t0mstaff Markdown: Syntax ================ * [Overview](#overview) * [Philosophy](#philosophy) * [Inline HTML](#html) * [Automatic Escaping for Special Characters](#autoescape) * [Block Elements](#block) * [Paragraphs and Line Breaks](#p) * [Headers](#header) * [Blockquotes](#blockquote) * [Lists](#list) * [Code Blocks](#precode) * [Horizontal Rules](#hr) * [Span Elements](#span) * [Links](#link) * [Emphasis](#em) * [Code](#code) * [Images](#img) * [Miscellaneous](#misc) * [Backslash Escapes](#backslash) * [Automatic Links](#autolink) **Note:** This document is itself written using Markdown; you can [see the source for it by adding '.text' to the URL][src]. [src]: /projects/markdown/syntax.text * * *

    Overview

    Philosophy

    Markdown is intended to be as easy-to-read and easy-to-write as is feasible. Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it's been marked up with tags or formatting instructions. While Markdown's syntax has been influenced by several existing text-to-HTML filters -- including [Setext] [1], [atx] [2], [Textile] [3], [reStructuredText] [4], [Grutatext] [5], and [EtText] [6] -- the single biggest source of inspiration for Markdown's syntax is the format of plain text email. [1]: http://docutils.sourceforge.net/mirror/setext.html [2]: http://www.aaronsw.com/2002/atx/ [3]: http://textism.com/tools/textile/ [4]: http://docutils.sourceforge.net/rst.html [5]: http://www.triptico.com/software/grutatxt.html [6]: http://ettext.taint.org/doc/ To this end, Markdown's syntax is comprised entirely of punctuation characters, which punctuation characters have been carefully chosen so as to look like what they mean. E.g., asterisks around a word actually look like \*emphasis\*. Markdown lists look like, well, lists. Even blockquotes look like quoted passages of text, assuming you've ever used email.

    Inline HTML

    Markdown's syntax is intended for one purpose: to be used as a format for *writing* for the web. Markdown is not a replacement for HTML, or even close to it. Its syntax is very small, corresponding only to a very small subset of HTML tags. The idea is *not* to create a syntax that makes it easier to insert HTML tags. In my opinion, HTML tags are already easy to insert. The idea for Markdown is to make it easy to read, write, and edit prose. HTML is a *publishing* format; Markdown is a *writing* format. Thus, Markdown's formatting syntax only addresses issues that can be conveyed in plain text. For any markup that is not covered by Markdown's syntax, you simply use HTML itself. There's no need to preface it or delimit it to indicate that you're switching from Markdown to HTML; you just use the tags. The only restrictions are that block-level HTML elements -- e.g. `
    `, ``, `
    `, `

    `, etc. -- must be separated from surrounding content by blank lines, and the start and end tags of the block should not be indented with tabs or spaces. Markdown is smart enough not to add extra (unwanted) `

    ` tags around HTML block-level tags. For example, to add an HTML table to a Markdown article: This is a regular paragraph.

    Foo
    This is another regular paragraph. Note that Markdown formatting syntax is not processed within block-level HTML tags. E.g., you can't use Markdown-style `*emphasis*` inside an HTML block. Span-level HTML tags -- e.g. ``, ``, or `` -- can be used anywhere in a Markdown paragraph, list item, or header. If you want, you can even use HTML tags instead of Markdown formatting; e.g. if you'd prefer to use HTML `` or `` tags instead of Markdown's link or image syntax, go right ahead. Unlike block-level HTML tags, Markdown syntax *is* processed within span-level tags.

    Automatic Escaping for Special Characters

    In HTML, there are two characters that demand special treatment: `<` and `&`. Left angle brackets are used to start tags; ampersands are used to denote HTML entities. If you want to use them as literal characters, you must escape them as entities, e.g. `<`, and `&`. Ampersands in particular are bedeviling for web writers. If you want to write about 'AT&T', you need to write '`AT&T`'. You even need to escape ampersands within URLs. Thus, if you want to link to: http://images.google.com/images?num=30&q=larry+bird you need to encode the URL as: http://images.google.com/images?num=30&q=larry+bird in your anchor tag `href` attribute. Needless to say, this is easy to forget, and is probably the single most common source of HTML validation errors in otherwise well-marked-up web sites. Markdown allows you to use these characters naturally, taking care of all the necessary escaping for you. If you use an ampersand as part of an HTML entity, it remains unchanged; otherwise it will be translated into `&`. So, if you want to include a copyright symbol in your article, you can write: © and Markdown will leave it alone. But if you write: AT&T Markdown will translate it to: AT&T Similarly, because Markdown supports [inline HTML](#html), if you use angle brackets as delimiters for HTML tags, Markdown will treat them as such. But if you write: 4 < 5 Markdown will translate it to: 4 < 5 However, inside Markdown code spans and blocks, angle brackets and ampersands are *always* encoded automatically. This makes it easy to use Markdown to write about HTML code. (As opposed to raw HTML, which is a terrible format for writing about HTML syntax, because every single `<` and `&` in your example code needs to be escaped.) * * *

    Block Elements

    Paragraphs and Line Breaks

    A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines. (A blank line is any line that looks like a blank line -- a line containing nothing but spaces or tabs is considered blank.) Normal paragraphs should not be intended with spaces or tabs. The implication of the "one or more consecutive lines of text" rule is that Markdown supports "hard-wrapped" text paragraphs. This differs significantly from most other text-to-HTML formatters (including Movable Type's "Convert Line Breaks" option) which translate every line break character in a paragraph into a `
    ` tag. When you *do* want to insert a `
    ` break tag using Markdown, you end a line with two or more spaces, then type return. Yes, this takes a tad more effort to create a `
    `, but a simplistic "every line break is a `
    `" rule wouldn't work for Markdown. Markdown's email-style [blockquoting][bq] and multi-paragraph [list items][l] work best -- and look better -- when you format them with hard breaks. [bq]: #blockquote [l]: #list Markdown supports two styles of headers, [Setext] [1] and [atx] [2]. Setext-style headers are "underlined" using equal signs (for first-level headers) and dashes (for second-level headers). For example: This is an H1 ============= This is an H2 ------------- Any number of underlining `=`'s or `-`'s will work. Atx-style headers use 1-6 hash characters at the start of the line, corresponding to header levels 1-6. For example: # This is an H1 ## This is an H2 ###### This is an H6 Optionally, you may "close" atx-style headers. This is purely cosmetic -- you can use this if you think it looks better. The closing hashes don't even need to match the number of hashes used to open the header. (The number of opening hashes determines the header level.) : # This is an H1 # ## This is an H2 ## ### This is an H3 ######

    Blockquotes

    Markdown uses email-style `>` characters for blockquoting. If you're familiar with quoting passages of text in an email message, then you know how to create a blockquote in Markdown. It looks best if you hard wrap the text and put a `>` before every line: > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. > > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse > id sem consectetuer libero luctus adipiscing. Markdown allows you to be lazy and only put the `>` before the first line of a hard-wrapped paragraph: > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by adding additional levels of `>`: > This is the first level of quoting. > > > This is nested blockquote. > > Back to the first level. Blockquotes can contain other Markdown elements, including headers, lists, and code blocks: > ## This is a header. > > 1. This is the first list item. > 2. This is the second list item. > > Here's some example code: > > return shell_exec("echo $input | $markdown_script"); Any decent text editor should make email-style quoting easy. For example, with BBEdit, you can make a selection and choose Increase Quote Level from the Text menu.

    Lists

    Markdown supports ordered (numbered) and unordered (bulleted) lists. Unordered lists use asterisks, pluses, and hyphens -- interchangably -- as list markers: * Red * Green * Blue is equivalent to: + Red + Green + Blue and: - Red - Green - Blue Ordered lists use numbers followed by periods: 1. Bird 2. McHale 3. Parish It's important to note that the actual numbers you use to mark the list have no effect on the HTML output Markdown produces. The HTML Markdown produces from the above list is:
    1. Bird
    2. McHale
    3. Parish
    If you instead wrote the list in Markdown like this: 1. Bird 1. McHale 1. Parish or even: 3. Bird 1. McHale 8. Parish you'd get the exact same HTML output. The point is, if you want to, you can use ordinal numbers in your ordered Markdown lists, so that the numbers in your source match the numbers in your published HTML. But if you want to be lazy, you don't have to. If you do use lazy list numbering, however, you should still start the list with the number 1. At some point in the future, Markdown may support starting ordered lists at an arbitrary number. List markers typically start at the left margin, but may be indented by up to three spaces. List markers must be followed by one or more spaces or a tab. To make lists look nice, you can wrap items with hanging indents: * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. But if you want to be lazy, you don't have to: * Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. * Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse id sem consectetuer libero luctus adipiscing. If list items are separated by blank lines, Markdown will wrap the items in `

    ` tags in the HTML output. For example, this input: * Bird * Magic will turn into:

    • Bird
    • Magic
    But this: * Bird * Magic will turn into:
    • Bird

    • Magic

    List items may consist of multiple paragraphs. Each subsequent paragraph in a list item must be intended by either 4 spaces or one tab: 1. This is a list item with two paragraphs. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus. Donec sit amet nisl. Aliquam semper ipsum sit amet velit. 2. Suspendisse id sem consectetuer libero luctus adipiscing. It looks nice if you indent every line of the subsequent paragraphs, but here again, Markdown will allow you to be lazy: * This is a list item with two paragraphs. This is the second paragraph in the list item. You're only required to indent the first line. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. * Another item in the same list. To put a blockquote within a list item, the blockquote's `>` delimiters need to be indented: * A list item with a blockquote: > This is a blockquote > inside a list item. To put a code block within a list item, the code block needs to be indented *twice* -- 8 spaces or two tabs: * A list item with a code block: It's worth noting that it's possible to trigger an ordered list by accident, by writing something like this: 1986. What a great season. In other words, a *number-period-space* sequence at the beginning of a line. To avoid this, you can backslash-escape the period: 1986\. What a great season.

    Code Blocks

    Pre-formatted code blocks are used for writing about programming or markup source code. Rather than forming normal paragraphs, the lines of a code block are interpreted literally. Markdown wraps a code block in both `
    ` and `` tags.
    
    To produce a code block in Markdown, simply indent every line of the
    block by at least 4 spaces or 1 tab. For example, given this input:
    
        This is a normal paragraph:
    
            This is a code block.
    
    Markdown will generate:
    
        

    This is a normal paragraph:

    This is a code block.
        
    One level of indentation -- 4 spaces or 1 tab -- is removed from each line of the code block. For example, this: Here is an example of AppleScript: tell application "Foo" beep end tell will turn into:

    Here is an example of AppleScript:

    tell application "Foo"
            beep
        end tell
        
    A code block continues until it reaches a line that is not indented (or the end of the article). Within a code block, ampersands (`&`) and angle brackets (`<` and `>`) are automatically converted into HTML entities. This makes it very easy to include example HTML source code using Markdown -- just paste it and indent it, and Markdown will handle the hassle of encoding the ampersands and angle brackets. For example, this: will turn into:
    <div class="footer">
            &copy; 2004 Foo Corporation
        </div>
        
    Regular Markdown syntax is not processed within code blocks. E.g., asterisks are just literal asterisks within a code block. This means it's also easy to use Markdown to write about Markdown's own syntax.

    Horizontal Rules

    You can produce a horizontal rule tag (`
    `) by placing three or more hyphens, asterisks, or underscores on a line by themselves. If you wish, you may use spaces between the hyphens or asterisks. Each of the following lines will produce a horizontal rule: * * * *** ***** - - - --------------------------------------- _ _ _ * * *

    Span Elements

    Markdown supports two style of links: *inline* and *reference*. In both styles, the link text is delimited by [square brackets]. To create an inline link, use a set of regular parentheses immediately after the link text's closing square bracket. Inside the parentheses, put the URL where you want the link to point, along with an *optional* title for the link, surrounded in quotes. For example: This is [an example](http://example.com/ "Title") inline link. [This link](http://example.net/) has no title attribute. Will produce:

    This is an example inline link.

    This link has no title attribute.

    If you're referring to a local resource on the same server, you can use relative paths: See my [About](/about/) page for details. Reference-style links use a second set of square brackets, inside which you place a label of your choosing to identify the link: This is [an example][id] reference-style link. You can optionally use a space to separate the sets of brackets: This is [an example] [id] reference-style link. Then, anywhere in the document, you define your link label like this, on a line by itself: [id]: http://example.com/ "Optional Title Here" That is: * Square brackets containing the link identifier (optionally indented from the left margin using up to three spaces); * followed by a colon; * followed by one or more spaces (or tabs); * followed by the URL for the link; * optionally followed by a title attribute for the link, enclosed in double or single quotes. The link URL may, optionally, be surrounded by angle brackets: [id]: "Optional Title Here" You can put the title attribute on the next line and use extra spaces or tabs for padding, which tends to look better with longer URLs: [id]: http://example.com/longish/path/to/resource/here "Optional Title Here" Link definitions are only used for creating links during Markdown processing, and are stripped from your document in the HTML output. Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are *not* case sensitive. E.g. these two links: [link text][a] [link text][A] are equivalent. The *implicit link name* shortcut allows you to omit the name of the link, in which case the link text itself is used as the name. Just use an empty set of square brackets -- e.g., to link the word "Google" to the google.com web site, you could simply write: [Google][] And then define the link: [Google]: http://google.com/ Because link names may contain spaces, this shortcut even works for multiple words in the link text: Visit [Daring Fireball][] for more information. And then define the link: [Daring Fireball]: http://daringfireball.net/ Link definitions can be placed anywhere in your Markdown document. I tend to put them immediately after each paragraph in which they're used, but if you want, you can put them all at the end of your document, sort of like footnotes. Here's an example of reference links in action: I get 10 times more traffic from [Google] [1] than from [Yahoo] [2] or [MSN] [3]. [1]: http://google.com/ "Google" [2]: http://search.yahoo.com/ "Yahoo Search" [3]: http://search.msn.com/ "MSN Search" Using the implicit link name shortcut, you could instead write: I get 10 times more traffic from [Google][] than from [Yahoo][] or [MSN][]. [google]: http://google.com/ "Google" [yahoo]: http://search.yahoo.com/ "Yahoo Search" [msn]: http://search.msn.com/ "MSN Search" Both of the above examples will produce the following HTML output:

    I get 10 times more traffic from Google than from Yahoo or MSN.

    For comparison, here is the same paragraph written using Markdown's inline link style: I get 10 times more traffic from [Google](http://google.com/ "Google") than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or [MSN](http://search.msn.com/ "MSN Search"). The point of reference-style links is not that they're easier to write. The point is that with reference-style links, your document source is vastly more readable. Compare the above examples: using reference-style links, the paragraph itself is only 81 characters long; with inline-style links, it's 176 characters; and as raw HTML, it's 234 characters. In the raw HTML, there's more markup than there is text. With Markdown's reference-style links, a source document much more closely resembles the final output, as rendered in a browser. By allowing you to move the markup-related metadata out of the paragraph, you can add links without interrupting the narrative flow of your prose.

    Emphasis

    Markdown treats asterisks (`*`) and underscores (`_`) as indicators of emphasis. Text wrapped with one `*` or `_` will be wrapped with an HTML `` tag; double `*`'s or `_`'s will be wrapped with an HTML `` tag. E.g., this input: *single asterisks* _single underscores_ **double asterisks** __double underscores__ will produce: single asterisks single underscores double asterisks double underscores You can use whichever style you prefer; the lone restriction is that the same character must be used to open and close an emphasis span. Emphasis can be used in the middle of a word: un*fucking*believable But if you surround an `*` or `_` with spaces, it'll be treated as a literal asterisk or underscore. To produce a literal asterisk or underscore at a position where it would otherwise be used as an emphasis delimiter, you can backslash escape it: \*this text is surrounded by literal asterisks\*

    Code

    To indicate a span of code, wrap it with backtick quotes (`` ` ``). Unlike a pre-formatted code block, a code span indicates code within a normal paragraph. For example: Use the `printf()` function. will produce:

    Use the printf() function.

    To include a literal backtick character within a code span, you can use multiple backticks as the opening and closing delimiters: ``There is a literal backtick (`) here.`` which will produce this:

    There is a literal backtick (`) here.

    The backtick delimiters surrounding a code span may include spaces -- one after the opening, one before the closing. This allows you to place literal backtick characters at the beginning or end of a code span: A single backtick in a code span: `` ` `` A backtick-delimited string in a code span: `` `foo` `` will produce:

    A single backtick in a code span: `

    A backtick-delimited string in a code span: `foo`

    With a code span, ampersands and angle brackets are encoded as HTML entities automatically, which makes it easy to include example HTML tags. Markdown will turn this: Please don't use any `` tags. into:

    Please don't use any <blink> tags.

    You can write this: `—` is the decimal-encoded equivalent of `—`. to produce:

    &#8212; is the decimal-encoded equivalent of &mdash;.

    Images

    Admittedly, it's fairly difficult to devise a "natural" syntax for placing images into a plain text document format. Markdown uses an image syntax that is intended to resemble the syntax for links, allowing for two styles: *inline* and *reference*. Inline image syntax looks like this: ![Alt text](/path/to/img.jpg) ![Alt text](/path/to/img.jpg "Optional title") That is: * An exclamation mark: `!`; * followed by a set of square brackets, containing the `alt` attribute text for the image; * followed by a set of parentheses, containing the URL or path to the image, and an optional `title` attribute enclosed in double or single quotes. Reference-style image syntax looks like this: ![Alt text][id] Where "id" is the name of a defined image reference. Image references are defined using syntax identical to link references: [id]: url/to/image "Optional title attribute" As of this writing, Markdown has no syntax for specifying the dimensions of an image; if this is important to you, you can simply use regular HTML `` tags. * * *

    Miscellaneous

    Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this: Markdown will turn this into: http://example.com/ Automatic links for email addresses work similarly, except that Markdown will also perform a bit of randomized decimal and hex entity-encoding to help obscure your address from address-harvesting spambots. For example, Markdown will turn this: into something like this: address@exa mple.com which will render in a browser as a clickable link to "address@example.com". (This sort of entity-encoding trick will indeed fool many, if not most, address-harvesting bots, but it definitely won't fool all of them. It's better than nothing, but an address published in this way will probably eventually start receiving spam.)

    Backslash Escapes

    Markdown allows you to use backslash escapes to generate literal characters which would otherwise have special meaning in Markdown's formatting syntax. For example, if you wanted to surround a word with literal asterisks (instead of an HTML `` tag), you can backslashes before the asterisks, like this: \*literal asterisks\* Markdown provides backslash escapes for the following characters: \ backslash ` backtick * asterisk _ underscore {} curly braces [] square brackets () parentheses # hash mark + plus sign - minus sign (hyphen) . dot ! exclamation mark Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Markdown_Documentation_-_Syntax.xhtml0000644000076500000240000007607711233534212030654 0ustar t0mstaff

    Markdown: Syntax

    Note: This document is itself written using Markdown; you can see the source for it by adding '.text' to the URL.


    Overview

    Philosophy

    Markdown is intended to be as easy-to-read and easy-to-write as is feasible.

    Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it's been marked up with tags or formatting instructions. While Markdown's syntax has been influenced by several existing text-to-HTML filters -- including Setext, atx, Textile, reStructuredText, Grutatext, and EtText -- the single biggest source of inspiration for Markdown's syntax is the format of plain text email.

    To this end, Markdown's syntax is comprised entirely of punctuation characters, which punctuation characters have been carefully chosen so as to look like what they mean. E.g., asterisks around a word actually look like *emphasis*. Markdown lists look like, well, lists. Even blockquotes look like quoted passages of text, assuming you've ever used email.

    Inline HTML

    Markdown's syntax is intended for one purpose: to be used as a format for writing for the web.

    Markdown is not a replacement for HTML, or even close to it. Its syntax is very small, corresponding only to a very small subset of HTML tags. The idea is not to create a syntax that makes it easier to insert HTML tags. In my opinion, HTML tags are already easy to insert. The idea for Markdown is to make it easy to read, write, and edit prose. HTML is a publishing format; Markdown is a writing format. Thus, Markdown's formatting syntax only addresses issues that can be conveyed in plain text.

    For any markup that is not covered by Markdown's syntax, you simply use HTML itself. There's no need to preface it or delimit it to indicate that you're switching from Markdown to HTML; you just use the tags.

    The only restrictions are that block-level HTML elements -- e.g. <div>, <table>, <pre>, <p>, etc. -- must be separated from surrounding content by blank lines, and the start and end tags of the block should not be indented with tabs or spaces. Markdown is smart enough not to add extra (unwanted) <p> tags around HTML block-level tags.

    For example, to add an HTML table to a Markdown article:

    This is a regular paragraph.
    
    <table>
        <tr>
            <td>Foo</td>
        </tr>
    </table>
    
    This is another regular paragraph.
    

    Note that Markdown formatting syntax is not processed within block-level HTML tags. E.g., you can't use Markdown-style *emphasis* inside an HTML block.

    Span-level HTML tags -- e.g. <span>, <cite>, or <del> -- can be used anywhere in a Markdown paragraph, list item, or header. If you want, you can even use HTML tags instead of Markdown formatting; e.g. if you'd prefer to use HTML <a> or <img> tags instead of Markdown's link or image syntax, go right ahead.

    Unlike block-level HTML tags, Markdown syntax is processed within span-level tags.

    Automatic Escaping for Special Characters

    In HTML, there are two characters that demand special treatment: < and &. Left angle brackets are used to start tags; ampersands are used to denote HTML entities. If you want to use them as literal characters, you must escape them as entities, e.g. &lt;, and &amp;.

    Ampersands in particular are bedeviling for web writers. If you want to write about 'AT&T', you need to write 'AT&amp;T'. You even need to escape ampersands within URLs. Thus, if you want to link to:

    http://images.google.com/images?num=30&q=larry+bird
    

    you need to encode the URL as:

    http://images.google.com/images?num=30&amp;q=larry+bird
    

    in your anchor tag href attribute. Needless to say, this is easy to forget, and is probably the single most common source of HTML validation errors in otherwise well-marked-up web sites.

    Markdown allows you to use these characters naturally, taking care of all the necessary escaping for you. If you use an ampersand as part of an HTML entity, it remains unchanged; otherwise it will be translated into &amp;.

    So, if you want to include a copyright symbol in your article, you can write:

    &copy;
    

    and Markdown will leave it alone. But if you write:

    AT&T
    

    Markdown will translate it to:

    AT&amp;T
    

    Similarly, because Markdown supports inline HTML, if you use angle brackets as delimiters for HTML tags, Markdown will treat them as such. But if you write:

    4 < 5
    

    Markdown will translate it to:

    4 &lt; 5
    

    However, inside Markdown code spans and blocks, angle brackets and ampersands are always encoded automatically. This makes it easy to use Markdown to write about HTML code. (As opposed to raw HTML, which is a terrible format for writing about HTML syntax, because every single < and & in your example code needs to be escaped.)


    Block Elements

    Paragraphs and Line Breaks

    A paragraph is simply one or more consecutive lines of text, separated by one or more blank lines. (A blank line is any line that looks like a blank line -- a line containing nothing but spaces or tabs is considered blank.) Normal paragraphs should not be intended with spaces or tabs.

    The implication of the "one or more consecutive lines of text" rule is that Markdown supports "hard-wrapped" text paragraphs. This differs significantly from most other text-to-HTML formatters (including Movable Type's "Convert Line Breaks" option) which translate every line break character in a paragraph into a <br /> tag.

    When you do want to insert a <br /> break tag using Markdown, you end a line with two or more spaces, then type return.

    Yes, this takes a tad more effort to create a <br />, but a simplistic "every line break is a <br />" rule wouldn't work for Markdown. Markdown's email-style blockquoting and multi-paragraph list items work best -- and look better -- when you format them with hard breaks.

    Markdown supports two styles of headers, Setext and atx.

    Setext-style headers are "underlined" using equal signs (for first-level headers) and dashes (for second-level headers). For example:

    This is an H1
    =============
    
    This is an H2
    -------------
    

    Any number of underlining ='s or -'s will work.

    Atx-style headers use 1-6 hash characters at the start of the line, corresponding to header levels 1-6. For example:

    # This is an H1
    
    ## This is an H2
    
    ###### This is an H6
    

    Optionally, you may "close" atx-style headers. This is purely cosmetic -- you can use this if you think it looks better. The closing hashes don't even need to match the number of hashes used to open the header. (The number of opening hashes determines the header level.) :

    # This is an H1 #
    
    ## This is an H2 ##
    
    ### This is an H3 ######
    

    Blockquotes

    Markdown uses email-style > characters for blockquoting. If you're familiar with quoting passages of text in an email message, then you know how to create a blockquote in Markdown. It looks best if you hard wrap the text and put a > before every line:

    > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
    > consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
    > Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
    > 
    > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
    > id sem consectetuer libero luctus adipiscing.
    

    Markdown allows you to be lazy and only put the > before the first line of a hard-wrapped paragraph:

    > This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
    consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus.
    Vestibulum enim wisi, viverra nec, fringilla in, laoreet vitae, risus.
    
    > Donec sit amet nisl. Aliquam semper ipsum sit amet velit. Suspendisse
    id sem consectetuer libero luctus adipiscing.
    

    Blockquotes can be nested (i.e. a blockquote-in-a-blockquote) by adding additional levels of >:

    > This is the first level of quoting.
    >
    > > This is nested blockquote.
    >
    > Back to the first level.
    

    Blockquotes can contain other Markdown elements, including headers, lists, and code blocks:

    > ## This is a header.
    > 
    > 1.   This is the first list item.
    > 2.   This is the second list item.
    > 
    > Here's some example code:
    > 
    >     return shell_exec("echo $input | $markdown_script");
    

    Any decent text editor should make email-style quoting easy. For example, with BBEdit, you can make a selection and choose Increase Quote Level from the Text menu.

    Lists

    Markdown supports ordered (numbered) and unordered (bulleted) lists.

    Unordered lists use asterisks, pluses, and hyphens -- interchangably -- as list markers:

    *   Red
    *   Green
    *   Blue
    

    is equivalent to:

    +   Red
    +   Green
    +   Blue
    

    and:

    -   Red
    -   Green
    -   Blue
    

    Ordered lists use numbers followed by periods:

    1.  Bird
    2.  McHale
    3.  Parish
    

    It's important to note that the actual numbers you use to mark the list have no effect on the HTML output Markdown produces. The HTML Markdown produces from the above list is:

    <ol>
    <li>Bird</li>
    <li>McHale</li>
    <li>Parish</li>
    </ol>
    

    If you instead wrote the list in Markdown like this:

    1.  Bird
    1.  McHale
    1.  Parish
    

    or even:

    3. Bird
    1. McHale
    8. Parish
    

    you'd get the exact same HTML output. The point is, if you want to, you can use ordinal numbers in your ordered Markdown lists, so that the numbers in your source match the numbers in your published HTML. But if you want to be lazy, you don't have to.

    If you do use lazy list numbering, however, you should still start the list with the number 1. At some point in the future, Markdown may support starting ordered lists at an arbitrary number.

    List markers typically start at the left margin, but may be indented by up to three spaces. List markers must be followed by one or more spaces or a tab.

    To make lists look nice, you can wrap items with hanging indents:

    *   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
        Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
        viverra nec, fringilla in, laoreet vitae, risus.
    *   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
        Suspendisse id sem consectetuer libero luctus adipiscing.
    

    But if you want to be lazy, you don't have to:

    *   Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
    Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi,
    viverra nec, fringilla in, laoreet vitae, risus.
    *   Donec sit amet nisl. Aliquam semper ipsum sit amet velit.
    Suspendisse id sem consectetuer libero luctus adipiscing.
    

    If list items are separated by blank lines, Markdown will wrap the items in <p> tags in the HTML output. For example, this input:

    *   Bird
    *   Magic
    

    will turn into:

    <ul>
    <li>Bird</li>
    <li>Magic</li>
    </ul>
    

    But this:

    *   Bird
    
    *   Magic
    

    will turn into:

    <ul>
    <li><p>Bird</p></li>
    <li><p>Magic</p></li>
    </ul>
    

    List items may consist of multiple paragraphs. Each subsequent paragraph in a list item must be intended by either 4 spaces or one tab:

    1.  This is a list item with two paragraphs. Lorem ipsum dolor
        sit amet, consectetuer adipiscing elit. Aliquam hendrerit
        mi posuere lectus.
    
        Vestibulum enim wisi, viverra nec, fringilla in, laoreet
        vitae, risus. Donec sit amet nisl. Aliquam semper ipsum
        sit amet velit.
    
    2.  Suspendisse id sem consectetuer libero luctus adipiscing.
    

    It looks nice if you indent every line of the subsequent paragraphs, but here again, Markdown will allow you to be lazy:

    *   This is a list item with two paragraphs.
    
        This is the second paragraph in the list item. You're
    only required to indent the first line. Lorem ipsum dolor
    sit amet, consectetuer adipiscing elit.
    
    *   Another item in the same list.
    

    To put a blockquote within a list item, the blockquote's > delimiters need to be indented:

    *   A list item with a blockquote:
    
        > This is a blockquote
        > inside a list item.
    

    To put a code block within a list item, the code block needs to be indented twice -- 8 spaces or two tabs:

    *   A list item with a code block:
    
            <code goes here>
    

    It's worth noting that it's possible to trigger an ordered list by accident, by writing something like this:

    1986. What a great season.
    

    In other words, a number-period-space sequence at the beginning of a line. To avoid this, you can backslash-escape the period:

    1986\. What a great season.
    

    Code Blocks

    Pre-formatted code blocks are used for writing about programming or markup source code. Rather than forming normal paragraphs, the lines of a code block are interpreted literally. Markdown wraps a code block in both <pre> and <code> tags.

    To produce a code block in Markdown, simply indent every line of the block by at least 4 spaces or 1 tab. For example, given this input:

    This is a normal paragraph:
    
        This is a code block.
    

    Markdown will generate:

    <p>This is a normal paragraph:</p>
    
    <pre><code>This is a code block.
    </code></pre>
    

    One level of indentation -- 4 spaces or 1 tab -- is removed from each line of the code block. For example, this:

    Here is an example of AppleScript:
    
        tell application "Foo"
            beep
        end tell
    

    will turn into:

    <p>Here is an example of AppleScript:</p>
    
    <pre><code>tell application "Foo"
        beep
    end tell
    </code></pre>
    

    A code block continues until it reaches a line that is not indented (or the end of the article).

    Within a code block, ampersands (&) and angle brackets (< and >) are automatically converted into HTML entities. This makes it very easy to include example HTML source code using Markdown -- just paste it and indent it, and Markdown will handle the hassle of encoding the ampersands and angle brackets. For example, this:

        <div class="footer">
            &copy; 2004 Foo Corporation
        </div>
    

    will turn into:

    <pre><code>&lt;div class="footer"&gt;
        &amp;copy; 2004 Foo Corporation
    &lt;/div&gt;
    </code></pre>
    

    Regular Markdown syntax is not processed within code blocks. E.g., asterisks are just literal asterisks within a code block. This means it's also easy to use Markdown to write about Markdown's own syntax.

    Horizontal Rules

    You can produce a horizontal rule tag (<hr />) by placing three or more hyphens, asterisks, or underscores on a line by themselves. If you wish, you may use spaces between the hyphens or asterisks. Each of the following lines will produce a horizontal rule:

    * * *
    
    ***
    
    *****
    
    - - -
    
    ---------------------------------------
    
    _ _ _
    

    Span Elements

    Markdown supports two style of links: inline and reference.

    In both styles, the link text is delimited by [square brackets].

    To create an inline link, use a set of regular parentheses immediately after the link text's closing square bracket. Inside the parentheses, put the URL where you want the link to point, along with an optional title for the link, surrounded in quotes. For example:

    This is [an example](http://example.com/ "Title") inline link.
    
    [This link](http://example.net/) has no title attribute.
    

    Will produce:

    <p>This is <a href="http://example.com/" title="Title">
    an example</a> inline link.</p>
    
    <p><a href="http://example.net/">This link</a> has no
    title attribute.</p>
    

    If you're referring to a local resource on the same server, you can use relative paths:

    See my [About](/about/) page for details.
    

    Reference-style links use a second set of square brackets, inside which you place a label of your choosing to identify the link:

    This is [an example][id] reference-style link.
    

    You can optionally use a space to separate the sets of brackets:

    This is [an example] [id] reference-style link.
    

    Then, anywhere in the document, you define your link label like this, on a line by itself:

    [id]: http://example.com/  "Optional Title Here"
    

    That is:

    • Square brackets containing the link identifier (optionally indented from the left margin using up to three spaces);
    • followed by a colon;
    • followed by one or more spaces (or tabs);
    • followed by the URL for the link;
    • optionally followed by a title attribute for the link, enclosed in double or single quotes.

    The link URL may, optionally, be surrounded by angle brackets:

    [id]: <http://example.com/>  "Optional Title Here"
    

    You can put the title attribute on the next line and use extra spaces or tabs for padding, which tends to look better with longer URLs:

    [id]: http://example.com/longish/path/to/resource/here
        "Optional Title Here"
    

    Link definitions are only used for creating links during Markdown processing, and are stripped from your document in the HTML output.

    Link definition names may constist of letters, numbers, spaces, and punctuation -- but they are not case sensitive. E.g. these two links:

    [link text][a]
    [link text][A]
    

    are equivalent.

    The implicit link name shortcut allows you to omit the name of the link, in which case the link text itself is used as the name. Just use an empty set of square brackets -- e.g., to link the word "Google" to the google.com web site, you could simply write:

    [Google][]
    

    And then define the link:

    [Google]: http://google.com/
    

    Because link names may contain spaces, this shortcut even works for multiple words in the link text:

    Visit [Daring Fireball][] for more information.
    

    And then define the link:

    [Daring Fireball]: http://daringfireball.net/
    

    Link definitions can be placed anywhere in your Markdown document. I tend to put them immediately after each paragraph in which they're used, but if you want, you can put them all at the end of your document, sort of like footnotes.

    Here's an example of reference links in action:

    I get 10 times more traffic from [Google] [1] than from
    [Yahoo] [2] or [MSN] [3].
    
      [1]: http://google.com/        "Google"
      [2]: http://search.yahoo.com/  "Yahoo Search"
      [3]: http://search.msn.com/    "MSN Search"
    

    Using the implicit link name shortcut, you could instead write:

    I get 10 times more traffic from [Google][] than from
    [Yahoo][] or [MSN][].
    
      [google]: http://google.com/        "Google"
      [yahoo]:  http://search.yahoo.com/  "Yahoo Search"
      [msn]:    http://search.msn.com/    "MSN Search"
    

    Both of the above examples will produce the following HTML output:

    <p>I get 10 times more traffic from <a href="http://google.com/"
    title="Google">Google</a> than from
    <a href="http://search.yahoo.com/" title="Yahoo Search">Yahoo</a>
    or <a href="http://search.msn.com/" title="MSN Search">MSN</a>.</p>
    

    For comparison, here is the same paragraph written using Markdown's inline link style:

    I get 10 times more traffic from [Google](http://google.com/ "Google")
    than from [Yahoo](http://search.yahoo.com/ "Yahoo Search") or
    [MSN](http://search.msn.com/ "MSN Search").
    

    The point of reference-style links is not that they're easier to write. The point is that with reference-style links, your document source is vastly more readable. Compare the above examples: using reference-style links, the paragraph itself is only 81 characters long; with inline-style links, it's 176 characters; and as raw HTML, it's 234 characters. In the raw HTML, there's more markup than there is text.

    With Markdown's reference-style links, a source document much more closely resembles the final output, as rendered in a browser. By allowing you to move the markup-related metadata out of the paragraph, you can add links without interrupting the narrative flow of your prose.

    Emphasis

    Markdown treats asterisks (*) and underscores (_) as indicators of emphasis. Text wrapped with one * or _ will be wrapped with an HTML <em> tag; double *'s or _'s will be wrapped with an HTML <strong> tag. E.g., this input:

    *single asterisks*
    
    _single underscores_
    
    **double asterisks**
    
    __double underscores__
    

    will produce:

    <em>single asterisks</em>
    
    <em>single underscores</em>
    
    <strong>double asterisks</strong>
    
    <strong>double underscores</strong>
    

    You can use whichever style you prefer; the lone restriction is that the same character must be used to open and close an emphasis span.

    Emphasis can be used in the middle of a word:

    un*fucking*believable
    

    But if you surround an * or _ with spaces, it'll be treated as a literal asterisk or underscore.

    To produce a literal asterisk or underscore at a position where it would otherwise be used as an emphasis delimiter, you can backslash escape it:

    \*this text is surrounded by literal asterisks\*
    

    Code

    To indicate a span of code, wrap it with backtick quotes (`). Unlike a pre-formatted code block, a code span indicates code within a normal paragraph. For example:

    Use the `printf()` function.
    

    will produce:

    <p>Use the <code>printf()</code> function.</p>
    

    To include a literal backtick character within a code span, you can use multiple backticks as the opening and closing delimiters:

    ``There is a literal backtick (`) here.``
    

    which will produce this:

    <p><code>There is a literal backtick (`) here.</code></p>
    

    The backtick delimiters surrounding a code span may include spaces -- one after the opening, one before the closing. This allows you to place literal backtick characters at the beginning or end of a code span:

    A single backtick in a code span: `` ` ``
    
    A backtick-delimited string in a code span: `` `foo` ``
    

    will produce:

    <p>A single backtick in a code span: <code>`</code></p>
    
    <p>A backtick-delimited string in a code span: <code>`foo`</code></p>
    

    With a code span, ampersands and angle brackets are encoded as HTML entities automatically, which makes it easy to include example HTML tags. Markdown will turn this:

    Please don't use any `<blink>` tags.
    

    into:

    <p>Please don't use any <code>&lt;blink&gt;</code> tags.</p>
    

    You can write this:

    `&#8212;` is the decimal-encoded equivalent of `&mdash;`.
    

    to produce:

    <p><code>&amp;#8212;</code> is the decimal-encoded
    equivalent of <code>&amp;mdash;</code>.</p>
    

    Images

    Admittedly, it's fairly difficult to devise a "natural" syntax for placing images into a plain text document format.

    Markdown uses an image syntax that is intended to resemble the syntax for links, allowing for two styles: inline and reference.

    Inline image syntax looks like this:

    ![Alt text](/path/to/img.jpg)
    
    ![Alt text](/path/to/img.jpg "Optional title")
    

    That is:

    • An exclamation mark: !;
    • followed by a set of square brackets, containing the alt attribute text for the image;
    • followed by a set of parentheses, containing the URL or path to the image, and an optional title attribute enclosed in double or single quotes.

    Reference-style image syntax looks like this:

    ![Alt text][id]
    

    Where "id" is the name of a defined image reference. Image references are defined using syntax identical to link references:

    [id]: url/to/image  "Optional title attribute"
    

    As of this writing, Markdown has no syntax for specifying the dimensions of an image; if this is important to you, you can simply use regular HTML <img> tags.


    Miscellaneous

    Markdown supports a shortcut style for creating "automatic" links for URLs and email addresses: simply surround the URL or email address with angle brackets. What this means is that if you want to show the actual text of a URL or email address, and also have it be a clickable link, you can do this:

    <http://example.com/>
    

    Markdown will turn this into:

    <a href="http://example.com/">http://example.com/</a>
    

    Automatic links for email addresses work similarly, except that Markdown will also perform a bit of randomized decimal and hex entity-encoding to help obscure your address from address-harvesting spambots. For example, Markdown will turn this:

    <address@example.com>
    

    into something like this:

    <a href="&#x6D;&#x61;i&#x6C;&#x74;&#x6F;:&#x61;&#x64;&#x64;&#x72;&#x65;
    &#115;&#115;&#64;&#101;&#120;&#x61;&#109;&#x70;&#x6C;e&#x2E;&#99;&#111;
    &#109;">&#x61;&#x64;&#x64;&#x72;&#x65;&#115;&#115;&#64;&#101;&#120;&#x61;
    &#109;&#x70;&#x6C;e&#x2E;&#99;&#111;&#109;</a>
    

    which will render in a browser as a clickable link to "address@example.com".

    (This sort of entity-encoding trick will indeed fool many, if not most, address-harvesting bots, but it definitely won't fool all of them. It's better than nothing, but an address published in this way will probably eventually start receiving spam.)

    Backslash Escapes

    Markdown allows you to use backslash escapes to generate literal characters which would otherwise have special meaning in Markdown's formatting syntax. For example, if you wanted to surround a word with literal asterisks (instead of an HTML <em> tag), you can backslashes before the asterisks, like this:

    \*literal asterisks\*
    

    Markdown provides backslash escapes for the following characters:

    \   backslash
    `   backtick
    *   asterisk
    _   underscore
    {}  curly braces
    []  square brackets
    ()  parentheses
    #   hash mark
    +   plus sign
    -   minus sign (hyphen)
    .   dot
    !   exclamation mark
    
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Metadata_(Complete).text0000644000076500000240000000025611233534212025722 0ustar t0mstaffTitle: MultiMarkdown Test Document Author: Fletcher T. Penney, MD Date: January 14, 2006 Format: complete Css: http://some.url/sample.css Intro: This is the first paragraph.Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Metadata_(Complete).xhtml0000644000076500000240000000073211233534212026071 0ustar t0mstaff MultiMarkdown Test Document

    Intro: This is the first paragraph.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Metadata_(Snippet).html0000644000076500000240000000022711233534212025552 0ustar t0mstaffAuthor: Fletcher T. Penney, MD
    Date: January 14, 2006
    Title: MultiMarkdown Test Document

    Intro: This is the first paragraph.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Metadata_(Snippet).text0000644000076500000240000000017511233534212025574 0ustar t0mstaffTitle: MultiMarkdown Test Document Author: Fletcher T. Penney, MD Date: January 14, 2006 Intro: This is the first paragraph.Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Nested_blockquotes.text0000644000076500000240000000003011233534212026054 0ustar t0mstaff> foo > > > bar > > foo Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Nested_blockquotes.xhtml0000644000076500000240000000015111233534212026230 0ustar t0mstaff

    foo

    bar

    foo

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Ordered_and_unordered_lists.text0000644000076500000240000000151111233534212027717 0ustar t0mstaff## Unordered Asterisks tight: * asterisk 1 * asterisk 2 * asterisk 3 Asterisks loose: * asterisk 1 * asterisk 2 * asterisk 3 * * * Pluses tight: + Plus 1 + Plus 2 + Plus 3 Pluses loose: + Plus 1 + Plus 2 + Plus 3 * * * Minuses tight: - Minus 1 - Minus 2 - Minus 3 Minuses loose: - Minus 1 - Minus 2 - Minus 3 ## Ordered Tight: 1. First 2. Second 3. Third and: 1. One 2. Two 3. Three Loose using tabs: 1. First 2. Second 3. Third and using spaces: 1. One 2. Two 3. Three Multiple paragraphs: 1. Item 1, graf one. Item 2. graf two. The quick brown fox jumped over the lazy dog's back. 2. Item 2. 3. Item 3. ## Nested * Tab * Tab * Tab Here's another: 1. First 2. Second: * Fee * Fie * Foe 3. Third Same thing but with paragraphs: 1. First 2. Second: * Fee * Fie * Foe 3. Third Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Ordered_and_unordered_lists.xhtml0000644000076500000240000000313211233534212030070 0ustar t0mstaff

    Unordered

    Asterisks tight:

    • asterisk 1
    • asterisk 2
    • asterisk 3

    Asterisks loose:

    • asterisk 1

    • asterisk 2

    • asterisk 3


    Pluses tight:

    • Plus 1
    • Plus 2
    • Plus 3

    Pluses loose:

    • Plus 1

    • Plus 2

    • Plus 3


    Minuses tight:

    • Minus 1
    • Minus 2
    • Minus 3

    Minuses loose:

    • Minus 1

    • Minus 2

    • Minus 3

    Ordered

    Tight:

    1. First
    2. Second
    3. Third

    and:

    1. One
    2. Two
    3. Three

    Loose using tabs:

    1. First

    2. Second

    3. Third

    and using spaces:

    1. One

    2. Two

    3. Three

    Multiple paragraphs:

    1. Item 1, graf one.

      Item 2. graf two. The quick brown fox jumped over the lazy dog's back.

    2. Item 2.

    3. Item 3.

    Nested

    • Tab
      • Tab
        • Tab

    Here's another:

    1. First
    2. Second:
      • Fee
      • Fie
      • Foe
    3. Third

    Same thing but with paragraphs:

    1. First

    2. Second:

      • Fee
      • Fie
      • Foe
    3. Third

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/PHP-ASP_tags.text0000644000076500000240000000031711233534212024315 0ustar t0mstaffI am going with the same as Markdown.pl 1.0.2b8 here. *However* I reserve the right to also leave Template toolkit alone at a later date if I need to.. <%foo ok %> [% template_toolkit %]Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/PHP-ASP_tags.xhtml0000644000076500000240000000034511233534212024466 0ustar t0mstaff

    I am going with the same as Markdown.pl 1.0.2b8 here. However I reserve the right to also leave Template toolkit alone at a later date if I need to..

    <%foo ok %>

    [% template_toolkit %]

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Special_Characters.text0000644000076500000240000000014711233534212025747 0ustar t0mstaffThis is a list of special characters that are converted by MultiMarkdown. © should be converted. Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Special_Characters.xhtml0000644000076500000240000000016511233534212026117 0ustar t0mstaff

    This is a list of special characters that are converted by MultiMarkdown.

    © should be converted.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Strong_and_em_together.text0000644000076500000240000000071511233534212026711 0ustar t0mstaff***This is strong and em.*** So is ***this*** word. ___This is strong and em.___ So is ___this___ word. (Remember that `*` and `_` do not work in the middle of words in MultiMarkdown - too much accidental stuff with URL's) *\*This is em with surrounding asterisks.\** Rigorous test of combined strong and em: The sun is **_yellow and bright_**. The sky is __*blue and clear*__. The moon is *__full and gray__*. The stars are _**Bright and sparkly**_.Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Strong_and_em_together.xhtml0000644000076500000240000000132511233534212027057 0ustar t0mstaff

    This is strong and em.

    So is this word.

    This is strong and em.

    So is this word.

    (Remember that * and _ do not work in the middle of words in MultiMarkdown - too much accidental stuff with URL's)

    *This is em with surrounding asterisks.*

    Rigorous test of combined strong and em:

    The sun is yellow and bright.

    The sky is blue and clear.

    The moon is full and gray.

    The stars are Bright and sparkly.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Tables.text0000644000076500000240000000161111233534212023437 0ustar t0mstaffAnd this should be a link to the [Prototype][]. Table with nested headers | | Grouping || First Header | Second Header | Third Header | ------------ | :-----------: | -----------: | Content | *Long Cell* || Content | **Cell** | Cell | New section | More | Data | And more | And more || [Prototype table][prototype] Table with no headers ------------ | :-----------: | -----------: | Content | *Long Cell* || Content | **Cell** | Cell | New section | More | Data | And more | And more || And a link | [test link][] || Cross Reference| [Test Header][]|| [Headerless table][Caption here this can be added to Xrefs for links] And this should be a link to the [Prototype][]. # Test Header # This is a separate section. [test link]: http://some.place.comm/ Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Tables.xhtml0000644000076500000240000000343111233534212023611 0ustar t0mstaff

    And this should be a link to the Prototype.

    Table with nested headers

    Prototype table
    Grouping
    First Header Second Header Third Header
    Content Long Cell
    Content Cell Cell
    New section More Data
    And more And more

    Table with no headers

    Headerless table
    Content Long Cell
    Content Cell Cell
    New section More Data
    And more And more
    And a link test link
    Cross Reference Test Header

    And this should be a link to the Prototype.

    Test Header

    This is a separate section.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Tabs.text0000644000076500000240000000046711233534212023126 0ustar t0mstaff+ this is a list item indented with tabs + this is a list item indented with spaces Code: this code block is indented by one tab And: this code block is indented by two tabs And: + this is an example list item indented with tabs + this is an example list item indented with spaces Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Tabs.xhtml0000644000076500000240000000066711233534212023300 0ustar t0mstaff
    • this is a list item indented with tabs

    • this is a list item indented with spaces

    Code:

    this code block is indented by one tab
    

    And:

        this code block is indented by two tabs
    

    And:

    +   this is an example list item
        indented with tabs
    
    +   this is an example list item
        indented with spaces
    
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Warnings-rt34856.text0000644000076500000240000000006211233534212025051 0ustar t0mstaff | table | table | table | | | | | | a | b | c | Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Warnings-rt34856.xhtml0000644000076500000240000000025511233534212025225 0ustar t0mstaff
    table table table
    a b c
    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Wiki_Features.text0000644000076500000240000000044711233534212024774 0ustar t0mstaffUse WikiLinks: true Base Url: http://some.url.com/path/to/wiki/ This is a sample WikiWord, and a \WikiWord that is not a WikiWord. And this is a [[Free Link]]. A WikiWord and an escaped \WikiWord in a code block. And a `WikiWord in a code span`. And an escaped `\WikiWord` in a code span.Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/Wiki_Features.xhtml0000644000076500000240000000103211233534212025133 0ustar t0mstaffBase Url: http://some.url.com/path/to/wiki/
    Use WikiLinks: true

    This is a sample WikiWord, and a WikiWord that is not a WikiWord. And this is a Free Link.

    A WikiWord and an escaped \WikiWord in a code block.
    

    And a WikiWord in a code span.

    And an escaped \WikiWord in a code span.

    Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/XHTML_Headers.text0000644000076500000240000000050211270144331024552 0ustar t0mstaffTitle: MultiMarkdown Test Document Author: Fletcher T. Penney, MD Date: January 14, 2006 Format: complete Css: http://some.url/sample.css XHTML Header: Intro: This is the first paragraph.Text-MultiMarkdown-1.000034/t/Text-MultiMarkdown.mdtest/XHTML_Headers.xhtml0000644000076500000240000000114011270144331024721 0ustar t0mstaff MultiMarkdown Test Document

    Intro: This is the first paragraph.

    Text-MultiMarkdown-1.000034/Todo0000644000076500000240000000403211262441514014672 0ustar t0mstaffTodo pre 1.0.23: . Tests for $footnote =~ s/^glossary:\s*//i . Tests for $footnote_closing_tag . Add an option to Text::Markdown to have original brand markdown style emphasis within words support. . Re-merge Movable Type and Bloxom compatibility to the scripts, and add tests. . Need a dingus, write a small / demo app then ask the catalyst guys to host? . Re-write this Todo list. Todo pre 1.0.24: . Make Markdown.pl and MultiMarkdown.pl warn if unexpected options are used, and also have docs on what options are available. Expose the other module options in the scripts. . http://rt.cpan.org/Ticket/Display.html?id=33443 . More tests in t/15inlinehtmldoesnoturnoffmarkdown.t, I bet turning this feature on breaks things. . Document the markdown (and multimarkdown) syntaxes in the module properly. Todo pre 1.0.25: . Fix the list bug (see t/17ulolreportedonlist.t and Markdown mailing list) This probably involves the first draught of the new parser... . Text::Balanced is the slowest thing ever. The syntax guide looks like this: 49.4 0.569 0.568 113 0.0050 0.0050 Text::Balanced::_match_tagged 18.1 0.209 0.791 3 0.0696 0.2637 Text::MultiMarkdown::_HashHTMLBlocks Todo pre 1.0.26: . Have a look at extra features in http://code.google.com/p/python-markdown2/wiki/Extras and put anything we consider useful on the roadmap. . Integrate maruku (ruby port) test cases properly, and go looking for more. . Make a Text::Markdown::Extra with the Markdown extra features? Todo pre 1.1: . Either remove Text::MultiMarkdown::_FixFootnoteParagraphs or add tests to exercise it. Currently, removing it doesn't affect any test. . Build a parse tree when parsing (which can be returned), rather than just using strings. This would make the output format much more flexible, and would remove a load of nasty hacks which escape, then un-escape things again whist processing..