Do not escape single quote(apostrophe) inside code (dart-lang/markdown#498)
diff --git a/pkgs/markdown/lib/src/block_syntaxes/code_block_syntax.dart b/pkgs/markdown/lib/src/block_syntaxes/code_block_syntax.dart index f9e88d2..fdcb5f1 100644 --- a/pkgs/markdown/lib/src/block_syntaxes/code_block_syntax.dart +++ b/pkgs/markdown/lib/src/block_syntaxes/code_block_syntax.dart
@@ -51,7 +51,7 @@ var content = childLines.map((e) => e.content).join('\n'); if (parser.document.encodeHtml) { - content = escapeHtml(content); + content = escapeHtml(content, escapeApos: false); } return Element('pre', [Element.text('code', content)]);
diff --git a/pkgs/markdown/lib/src/block_syntaxes/fenced_code_block_syntax.dart b/pkgs/markdown/lib/src/block_syntaxes/fenced_code_block_syntax.dart index 3677ca5..e4086d6 100644 --- a/pkgs/markdown/lib/src/block_syntaxes/fenced_code_block_syntax.dart +++ b/pkgs/markdown/lib/src/block_syntaxes/fenced_code_block_syntax.dart
@@ -31,7 +31,7 @@ ).map((e) => e.content).join('\n'); if (parser.document.encodeHtml) { - text = escapeHtml(text); + text = escapeHtml(text, escapeApos: false); } if (text.isNotEmpty) { text = '$text\n';
diff --git a/pkgs/markdown/lib/src/inline_syntaxes/code_syntax.dart b/pkgs/markdown/lib/src/inline_syntaxes/code_syntax.dart index 6eb22a8..35783d3 100644 --- a/pkgs/markdown/lib/src/inline_syntaxes/code_syntax.dart +++ b/pkgs/markdown/lib/src/inline_syntaxes/code_syntax.dart
@@ -58,7 +58,7 @@ code = code.replaceAll('\n', ' '); if (parser.encodeHtml) { - code = escapeHtml(code); + code = escapeHtml(code, escapeApos: false); } parser.addNode(Element.text('code', code));
diff --git a/pkgs/markdown/lib/src/util.dart b/pkgs/markdown/lib/src/util.dart index e83e519..22ca19c 100644 --- a/pkgs/markdown/lib/src/util.dart +++ b/pkgs/markdown/lib/src/util.dart
@@ -13,9 +13,11 @@ /// One or more whitespace, for compressing. final _oneOrMoreWhitespacePattern = RegExp('[ \n\r\t]+'); -/// Escapes (`'`), (`"`), (`<`), (`>`) and (`&`) characters. -String escapeHtml(String html) => const HtmlEscape(HtmlEscapeMode( - escapeApos: true, +/// Escapes (`"`), (`<`), (`>`) and (`&`) characters. +/// Escapes (`'`) if [escapeApos] is `true`. +String escapeHtml(String html, {bool escapeApos = true}) => + HtmlEscape(HtmlEscapeMode( + escapeApos: escapeApos, escapeLtGt: true, escapeQuot: true, )).convert(html);
diff --git a/pkgs/markdown/test/original/code_blocks.unit b/pkgs/markdown/test/original/code_blocks.unit index 02e6746..330a90f 100644 --- a/pkgs/markdown/test/original/code_blocks.unit +++ b/pkgs/markdown/test/original/code_blocks.unit
@@ -58,3 +58,8 @@ <<< <pre><code><&> </code></pre> +>>> issue #497 + 'foo' +<<< +<pre><code>'foo' +</code></pre>
diff --git a/pkgs/markdown/test/original/fenced_code_block.unit b/pkgs/markdown/test/original/fenced_code_block.unit new file mode 100644 index 0000000..779e747 --- /dev/null +++ b/pkgs/markdown/test/original/fenced_code_block.unit
@@ -0,0 +1,7 @@ +>>> issue #497 +``` +'foo' +``` +<<< +<pre><code>'foo' +</code></pre>
diff --git a/pkgs/markdown/test/original/inline_code.unit b/pkgs/markdown/test/original/inline_code.unit index 53b0165..7315931 100644 --- a/pkgs/markdown/test/original/inline_code.unit +++ b/pkgs/markdown/test/original/inline_code.unit
@@ -81,3 +81,7 @@ <<< <p>before `` tick ``` after</p> +>>> issue #497 +`'foo'` +<<< +<p><code>'foo'</code></p>