Fix codeSyntax and BlockParser to respect encodeHtml flag (#239)

Fix codeSyntax and BlockParser to respect encodeHtml flag
diff --git a/lib/src/block_parser.dart b/lib/src/block_parser.dart
index bbabd8c..a07c08a 100644
--- a/lib/src/block_parser.dart
+++ b/lib/src/block_parser.dart
@@ -441,10 +441,12 @@
     // The Markdown tests expect a trailing newline.
     childLines.add('');
 
-    // Escape the code.
-    var escaped = escapeHtml(childLines.join('\n'));
-
-    var code = Element.text('code', escaped);
+    var text = childLines.join('\n');
+    if (parser.document.encodeHtml) {
+      // Escape the code.
+      text = escapeHtml(text);
+    }
+    var code = Element.text('code', text);
 
     // the info-string should be trimmed
     // http://spec.commonmark.org/0.22/#example-100
diff --git a/lib/src/inline_parser.dart b/lib/src/inline_parser.dart
index d7e711d..92572df 100644
--- a/lib/src/inline_parser.dart
+++ b/lib/src/inline_parser.dart
@@ -1067,7 +1067,10 @@
   }
 
   bool onMatch(InlineParser parser, Match match) {
-    parser.addNode(Element.text('code', escapeHtml(match[2].trim())));
+    var code = match[2].trim();
+    if (parser.document.encodeHtml) code = escapeHtml(code);
+    parser.addNode(Element.text('code', code));
+
     return true;
   }
 }
diff --git a/test/document_test.dart b/test/document_test.dart
index e5a9377..e9744e1 100644
--- a/test/document_test.dart
+++ b/test/document_test.dart
@@ -16,5 +16,53 @@
           const TypeMatcher<Text>()
               .having((e) => e.text, 'text', equals('< &')));
     });
+
+    test('encodeHtml true allow code block escaping', () {
+      var document = Document(encodeHtml: true);
+      var result = document.parseInline("```<p>Hello <em>Markdown</em></p>```");
+      expect(result, hasLength(1));
+      expect(
+          result[0],
+          const TypeMatcher<Element>().having(
+              (e) => e.textContent,
+              'text',
+              equals(
+                  "&lt;p&gt;Hello &lt;em&gt;Markdown&lt;/em&gt;&lt;/p&gt;")));
+    });
+
+    test('encodeHtml false prevents code block escaping', () {
+      var document = Document(encodeHtml: false);
+      var result = document.parseInline("```<p>Hello <em>Markdown</em></p>```");
+      expect(result, hasLength(1));
+      expect(
+          result[0],
+          const TypeMatcher<Element>().having((e) => e.textContent, 'text',
+              equals("<p>Hello <em>Markdown</em></p>")));
+    });
+
+    test('encodeHtml true allow code block escaping (BlockParser)', () {
+      var document = Document(encodeHtml: true);
+      var lines = "```\n<p>Hello <em>Markdown</em></p>\n```\n".split('\n');
+      var result = document.parseLines(lines);
+      expect(result, hasLength(1));
+      expect(
+          result[0],
+          const TypeMatcher<Element>().having(
+              (e) => e.textContent,
+              'text',
+              equals(
+                  "&lt;p&gt;Hello &lt;em&gt;Markdown&lt;/em&gt;&lt;/p&gt;\n")));
+    });
+
+    test('encodeHtml false prevents code block escaping (BlockParser)', () {
+      var document = Document(encodeHtml: false);
+      var lines = "```\n<p>Hello <em>Markdown</em></p>\n```\n".split('\n');
+      var result = document.parseLines(lines);
+      expect(result, hasLength(1));
+      expect(
+          result[0],
+          const TypeMatcher<Element>().having((e) => e.textContent, 'text',
+              equals("<p>Hello <em>Markdown</em></p>\n")));
+    });
   });
 }