Fix for preserving whitespace in text containing <pre> (dart-lang/markdown#264)
Fix for preserving whitespace in text containing <pre>
diff --git a/pkgs/markdown/lib/src/html_renderer.dart b/pkgs/markdown/lib/src/html_renderer.dart
index 14dc958..25bcd09 100644
--- a/pkgs/markdown/lib/src/html_renderer.dart
+++ b/pkgs/markdown/lib/src/html_renderer.dart
@@ -77,8 +77,10 @@
void visitText(Text text) {
var content = text.text;
if (const ['p', 'li'].contains(_lastVisitedTag)) {
- content =
- LineSplitter.split(content).map((line) => line.trimLeft()).join('\n');
+ var lines = LineSplitter.split(content);
+ content = (content.contains('<pre>'))
+ ? lines.join('\n')
+ : lines.map((line) => line.trimLeft()).join('\n');
if (text.text.endsWith('\n')) {
content = '$content\n';
}
diff --git a/pkgs/markdown/test/document_test.dart b/pkgs/markdown/test/document_test.dart
index 0375f29..2dbcafc 100644
--- a/pkgs/markdown/test/document_test.dart
+++ b/pkgs/markdown/test/document_test.dart
@@ -2,6 +2,8 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
+import 'dart:convert';
+
import 'package:markdown/markdown.dart';
import 'package:test/test.dart';
@@ -42,6 +44,16 @@
expect(codeBlock.textContent,
equals("<p>Hello <em>Markdown</em></p>\n"));
});
+
+ test('encodeHtml spaces are preserved in text', () {
+ // Example to get a <p> tag rendered before a text node.
+ var contents = 'Sample\n\n<pre>\n A\n B\n</pre>';
+ var document = Document(encodeHtml: true);
+ var lines = LineSplitter.split(contents).toList();
+ var nodes = BlockParser(lines, document).parseLines();
+ var result = HtmlRenderer().render(nodes);
+ expect(result, '<p>\n</p><pre>\n A\n B\n</pre>');
+ });
});
group('with encodeHtml disabled', () {