Fixing dart-lang/markdown#30 and dart-lang/markdown#60 by adding hard line break
diff --git a/pkgs/markdown/CHANGELOG.md b/pkgs/markdown/CHANGELOG.md index c996795..1217d79 100644 --- a/pkgs/markdown/CHANGELOG.md +++ b/pkgs/markdown/CHANGELOG.md
@@ -12,6 +12,7 @@ SetextHeaderWithIdSyntax extensions. * Implement backslash-escaping so that Markdown syntax can be escaped, such as `[foo]\(bar) ==> <p>[foo](bar)</p>`. +* Support for hard line breaks with either `\\\n` or ` \n` (#30, #60). * New public method for BlockParser: `peek(int linesAhead)`, meant for use in subclasses. * New public members for ListSyntax: `blocksInList` and `determineBlockItems()`,
diff --git a/pkgs/markdown/lib/src/inline_parser.dart b/pkgs/markdown/lib/src/inline_parser.dart index 94847c0..2e8f42f 100644 --- a/pkgs/markdown/lib/src/inline_parser.dart +++ b/pkgs/markdown/lib/src/inline_parser.dart
@@ -23,7 +23,7 @@ // TODO(amouravski): this regex will glom up any custom syntaxes unless // they're at the beginning. - new TextSyntax(r'\s*[A-Za-z0-9]+'), + new TextSyntax(r'[ \tA-Za-z0-9]*[A-Za-z0-9]'), // The real syntaxes. new AutolinkSyntax(), @@ -42,6 +42,10 @@ new TextSyntax(r'&', sub: '&'), // Encode "<". (Why not encode ">" too? Gruber is toying with us.) new TextSyntax(r'<', sub: '<'), + // Escaped newlines become hard line breaks. + new TextSyntax(r'\\\n', sub: '<br />\n'), + // Two or more spaces at the end of a line become hard line breaks. + new TextSyntax(r' +\n', sub: '<br />\n'), // Parse "**strong**" tags. new TagSyntax(r'\*\*', tag: 'strong'), // Parse "__strong__" tags.
diff --git a/pkgs/markdown/test/original/hard_line_breaks.unit b/pkgs/markdown/test/original/hard_line_breaks.unit new file mode 100644 index 0000000..232079c --- /dev/null +++ b/pkgs/markdown/test/original/hard_line_breaks.unit
@@ -0,0 +1,42 @@ +>>> hard line break in a paragraph, using backslash +First line.\ +Second line. + +<<< +<p>First line.<br /> +Second line.</p> +>>> within emphasis, using backslash +*Emphasised\ +text.* + +<<< +<p><em>Emphasised<br /> +text.</em></p> +>>> no escape within code, using backslash +`Some\ +code`. + +<<< +<p><code>Some\ +code</code>.</p> +>>> hard line break in a paragraph, using trailing spaces +First line. +Second line. + +<<< +<p>First line.<br /> +Second line.</p> +>>> within emphasis, using trailing spaces +*Emphasised +text.* + +<<< +<p><em>Emphasised<br /> +text.</em></p> +>>> no escape within code, using trailing spaces +`Some +code`. + +<<< +<p><code>Some +code</code>.</p>