Merge pull request dart-lang/markdown#94 from srawlins/shortcut-reference-links

Support shortuct reference links and images
diff --git a/pkgs/markdown/lib/src/block_parser.dart b/pkgs/markdown/lib/src/block_parser.dart
index aa82149..566a9d6 100644
--- a/pkgs/markdown/lib/src/block_parser.dart
+++ b/pkgs/markdown/lib/src/block_parser.dart
@@ -268,6 +268,8 @@
 class CodeBlockSyntax extends BlockSyntax {
   RegExp get pattern => _indentPattern;
 
+  bool get canEndBlock => false;
+
   const CodeBlockSyntax();
 
   List<String> parseChildLines(BlockParser parser) {
diff --git a/pkgs/markdown/test/original/paragraphs.unit b/pkgs/markdown/test/original/paragraphs.unit
index f725b62..b4bb334 100644
--- a/pkgs/markdown/test/original/paragraphs.unit
+++ b/pkgs/markdown/test/original/paragraphs.unit
@@ -48,3 +48,10 @@
 <<<
 <p>line1</p>
 <p>line2</p>
+>>> cannot be terminated by indented code blocks
+para
+    not code
+
+<<<
+<p>para
+    not code</p>
diff --git a/pkgs/markdown/tool/common_mark_stats.dart b/pkgs/markdown/tool/common_mark_stats.dart
index 87c8039..454b247 100644
--- a/pkgs/markdown/tool/common_mark_stats.dart
+++ b/pkgs/markdown/tool/common_mark_stats.dart
@@ -21,12 +21,15 @@
 
 void main(List<String> args) {
   var raw = args.any((s) => s == '--raw');
+  var verbose = args.any((s) => s == '--verbose');
 
   var sections = loadCommonMarkSections();
 
   var scores = new SplayTreeMap<String, SplayTreeMap<int, bool>>(
       compareAsciiLowerCaseNatural);
 
+  String indent(String s) => s.splitMapJoin('\n', onNonMatch: (n) => '    $n');
+
   sections.forEach((section, examples) {
     for (var e in examples) {
       var output;
@@ -43,6 +46,16 @@
       var expected = parseFragment(e.html);
       var actual = parseFragment(output);
       nestedMap[e.example] = compareHtml(expected.children, actual.children);
+      if (verbose && !nestedMap[e.example]) {
+        print('FAIL');
+        print('input:');
+        print(indent(e.markdown));
+        print('expected:');
+        print(indent(expected.outerHtml));
+        print('actual:');
+        print(indent(actual.outerHtml));
+        print('-----------------------');
+      }
     }
   });