diff --git a/Markdown.pl b/Markdown.pl index cbc240b..e953f23 100755 --- a/Markdown.pl +++ b/Markdown.pl @@ -1445,6 +1445,7 @@ sub Markdown { sub _HashBTCodeBlocks { # # Process Markdown backticks (```) delimited code blocks +# Process some (limited recognition) tilde (~~~) delimited code blocks # my $text = shift; my $less_than_indent = $opt{indent_width} - 1; @@ -1454,11 +1455,38 @@ sub _HashBTCodeBlocks { ([ ]{0,$less_than_indent})``(`+)[ \t]*(?:([\w.+-]+[#]?)(?:[ \t][ \t\w.+-]*)?)?\n ( # $4 = the code block -- one or more lines, starting with ``` (?: - .*\n+ + .*\n )+? ) # and ending with ``` or end of document - (?:(?:[ ]{0,$less_than_indent}``\2[ \t]*(?:\n|\Z))|\Z) + (?:(?:[ ]{0,$less_than_indent}``\2`*[ \t]*(?:\n|\Z))|\Z) + }{ + # $2 contains syntax highlighting to use if defined + my $leadsp = length($1); + my $codeblock = $4; + $codeblock =~ s/[ \t]+$//mg; # trim trailing spaces on lines + $codeblock = _DeTab($codeblock, 8, $leadsp); # physical tab stops are always 8 + $codeblock =~ s/\A\n+//; # trim leading newlines + $codeblock =~ s/\s+\z//; # trim trailing whitespace + $codeblock = _EncodeCode($codeblock); # or run highlighter here + $codeblock = "
"
+		. $codeblock . "\n
"; + + my $key = block_id($codeblock); + $g_html_blocks{$key} = $codeblock; + "\n\n" . $key . "\n\n"; + }egmx; + + $text =~ s{ + (?:(?<=\n)|\A) + ([ ]{0,$less_than_indent})~~(~)[ \t]*(?:([\w.+-]+[#]?)(?:[ \t][ \t\w.+-]*)?)?\n + ( # $4 = the code block -- one or more lines, starting with ~~~ + (?: + .*\n + )+? + ) + # and ending with ~~~ or end of document + (?:(?:[ ]{0,$less_than_indent}~~\2~*[ \t]*(?:\n|\Z))|\Z) }{ # $2 contains syntax highlighting to use if defined my $leadsp = length($1); diff --git a/syntax.md b/syntax.md index e65b46b..74d537c 100644 --- a/syntax.md +++ b/syntax.md @@ -241,8 +241,12 @@ headers). For example: This is an H3 ~~~~~~~~~~~~~ -Any number of underlining `=`'s, `-`'s or `~`'s will work. An optional -matching "overline" may precede the header like so: +Any number of underlining `=`'s will work. Any number of underlining +`-`'s will work but be careful it's not mistaken for a horizontal rule. +For `~`'s, try to use at least four to avoid being mistaken for +strike through text or a `~~~`-delimited code block. + +An optional matching "overline" may precede the header like so: ============= This is an H1 @@ -767,6 +771,11 @@ element), the indentation technique must be used. Also note that within a backticks-delimited code block, tab characters are always expanded with the tab stop locations 8 characters apart. +As an alternative to using backticks, limited recognition is available +for tilde-delimited code blocks. Instead of backtick quotes, exactly 3 +tildes (`~~~`) may be used to introduce the code block in which case +it must also be closed by tildes instead of backtick quotes. + 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