Merge pull request dart-lang/markdown#117 from dart-lang/more_details

Be more clear in stats about a successful test
diff --git a/pkgs/markdown/tool/common_mark_stats.dart b/pkgs/markdown/tool/common_mark_stats.dart
index 39e05d1..d25f4fa 100644
--- a/pkgs/markdown/tool/common_mark_stats.dart
+++ b/pkgs/markdown/tool/common_mark_stats.dart
@@ -62,51 +62,18 @@
 
   var sections = _loadCommonMarkSections();
 
-  var scores = new SplayTreeMap<String, SplayTreeMap<int, bool>>(
+  var scores = new SplayTreeMap<String, SplayTreeMap<int, CompareLevel>>(
       compareAsciiLowerCaseNatural);
 
-  String indent(String s) => s.splitMapJoin('\n', onNonMatch: (n) => '    $n');
-
-  printVerboseFailure(
-      String message, CommonMarkTestCase test, String expected, String actual) {
-    if (!verbose) {
-      return;
-    }
-
-    print('$message: http://spec.commonmark.org/0.26/#example-${test.example}');
-    print('input:');
-    print(indent(test.markdown));
-    print('expected:');
-    print(indent(expected));
-    print('actual:');
-    print(indent(actual));
-    print('-----------------------');
-  }
-
   sections.forEach((section, examples) {
     if (specifiedSection != null && section != specifiedSection) {
       return;
     }
     for (var e in examples) {
-      var output;
-      var nestedMap =
-          scores.putIfAbsent(section, () => new SplayTreeMap<int, bool>());
-      var expected = parseFragment(e.html);
+      var nestedMap = scores.putIfAbsent(
+          section, () => new SplayTreeMap<int, CompareLevel>());
 
-      try {
-        output = markdownToHtml(e.markdown);
-      } catch (exc, stackTrace) {
-        nestedMap[e.example] = false;
-        printVerboseFailure(
-            'ERROR', e, expected.outerHtml, 'Thrown: $exc\n$stackTrace');
-        continue;
-      }
-
-      var actual = parseFragment(output);
-      nestedMap[e.example] = compareHtml(expected.children, actual.children);
-      if (!nestedMap[e.example]) {
-        printVerboseFailure('FAIL', e, expected.outerHtml, actual.outerHtml);
-      }
+      nestedMap[e.example] = _compareResult(e, verbose);
     }
   });
 
@@ -119,7 +86,67 @@
   }
 }
 
+CompareLevel _compareResult(CommonMarkTestCase expected, bool verboseFail) {
+  String output;
+  try {
+    output = markdownToHtml(expected.markdown);
+  } catch (err, stackTrace) {
+    if (verboseFail) {
+      printVerboseFailure(
+          'ERROR', expected, expected.html, 'Thrown: $err\n$stackTrace');
+    }
+
+    return CompareLevel.error;
+  }
+
+  if (expected.html == output) {
+    return CompareLevel.strict;
+  }
+
+  var expectedParsed = parseFragment(expected.html);
+  var actual = parseFragment(output);
+
+  var looseMatch = _compareHtml(expectedParsed.children, actual.children);
+
+  if (!looseMatch && verboseFail) {
+    printVerboseFailure(
+        'FAIL', expected, expectedParsed.outerHtml, actual.outerHtml);
+  }
+
+  return looseMatch ? CompareLevel.loose : CompareLevel.fail;
+}
+
+String indent(String s) => s.splitMapJoin('\n', onNonMatch: (n) => '    $n');
+
+void printVerboseFailure(
+    String message, CommonMarkTestCase test, String expected, String actual) {
+  print('$message: http://spec.commonmark.org/0.26/#example-${test.example}');
+  print('input:');
+  print(indent(test.markdown));
+  print('expected:');
+  print(indent(expected));
+  print('actual:');
+  print(indent(actual));
+  print('-----------------------');
+}
+
+enum CompareLevel { strict, loose, fail, error }
+
 _convert(obj) {
+  if (obj is CompareLevel) {
+    switch (obj) {
+      case CompareLevel.strict:
+        return 'strict';
+      case CompareLevel.error:
+        return 'error';
+      case CompareLevel.fail:
+        return 'fail';
+      case CompareLevel.loose:
+        return 'loose';
+      default:
+        throw 'huh?';
+    }
+  }
   if (obj is Map) {
     var map = {};
     obj.forEach((k, v) {
@@ -131,7 +158,7 @@
   return obj;
 }
 
-Future _printRaw(scores, bool updateFiles) async {
+Future _printRaw(Map scores, bool updateFiles) async {
   IOSink sink;
   if (updateFiles) {
     var path = p.join(_currentDir, 'common_mark_stats.json');
@@ -155,7 +182,8 @@
   await sink.close();
 }
 
-Future _printFriendly(SplayTreeMap<String, SplayTreeMap<int, bool>> scores,
+Future _printFriendly(
+    SplayTreeMap<String, SplayTreeMap<int, CompareLevel>> scores,
     bool updateFiles) async {
   const countWidth = 4;
 
@@ -172,11 +200,17 @@
     sink = stdout;
   }
 
-  scores.forEach((section, map) {
+  scores.forEach((section, Map<int, CompareLevel> map) {
     var total = map.values.length;
     totalExamples += total;
 
-    var sectionValidCount = map.values.where((val) => val).length;
+    var sectionStrictCount =
+        map.values.where((val) => val == CompareLevel.strict).length;
+
+    var sectionLooseCount =
+        map.values.where((val) => val == CompareLevel.loose).length;
+
+    var sectionValidCount = sectionStrictCount + sectionLooseCount;
 
     totalValid += sectionValidCount;
 
@@ -198,7 +232,8 @@
 }
 
 /// Compare two DOM trees for equality.
-bool compareHtml(List<Element> expectedElements, List<Element> actualElements) {
+bool _compareHtml(
+    List<Element> expectedElements, List<Element> actualElements) {
   if (expectedElements.length != actualElements.length) {
     return false;
   }
@@ -239,7 +274,7 @@
       }
     }
 
-    var childrenEqual = compareHtml(expected.children, actual.children);
+    var childrenEqual = _compareHtml(expected.children, actual.children);
 
     if (!childrenEqual) {
       return false;
diff --git a/pkgs/markdown/tool/common_mark_stats.json b/pkgs/markdown/tool/common_mark_stats.json
index a020258..16c6480 100644
--- a/pkgs/markdown/tool/common_mark_stats.json
+++ b/pkgs/markdown/tool/common_mark_stats.json
@@ -1,673 +1,673 @@
 {
  "ATX headings": {
-  "32": true,
-  "33": true,
-  "34": true,
-  "35": true,
-  "36": true,
-  "37": true,
-  "38": false,
-  "39": true,
-  "40": true,
-  "41": false,
-  "42": true,
-  "43": true,
-  "44": true,
-  "45": true,
-  "46": true,
-  "47": true,
-  "48": true,
-  "49": false
+  "32": "strict",
+  "33": "strict",
+  "34": "strict",
+  "35": "strict",
+  "36": "strict",
+  "37": "strict",
+  "38": "fail",
+  "39": "strict",
+  "40": "loose",
+  "41": "fail",
+  "42": "strict",
+  "43": "loose",
+  "44": "strict",
+  "45": "loose",
+  "46": "loose",
+  "47": "strict",
+  "48": "strict",
+  "49": "fail"
  },
  "Autolinks": {
-  "560": true,
-  "561": true,
-  "562": false,
-  "563": false,
-  "564": false,
-  "565": false,
-  "566": true,
-  "567": false,
-  "568": false,
-  "569": false,
-  "570": false,
-  "571": false,
-  "572": true,
-  "573": true,
-  "574": true,
-  "575": true,
-  "576": true,
-  "577": true,
-  "578": true
+  "560": "strict",
+  "561": "loose",
+  "562": "fail",
+  "563": "fail",
+  "564": "fail",
+  "565": "fail",
+  "566": "strict",
+  "567": "fail",
+  "568": "fail",
+  "569": "fail",
+  "570": "fail",
+  "571": "fail",
+  "572": "loose",
+  "573": "loose",
+  "574": "loose",
+  "575": "loose",
+  "576": "loose",
+  "577": "strict",
+  "578": "strict"
  },
  "Backslash escapes": {
-  "288": true,
-  "289": true,
-  "290": false,
-  "291": true,
-  "292": true,
-  "293": true,
-  "294": true,
-  "295": true,
-  "296": false,
-  "297": true,
-  "298": false,
-  "299": false,
-  "300": false
+  "288": "loose",
+  "289": "strict",
+  "290": "fail",
+  "291": "strict",
+  "292": "strict",
+  "293": "strict",
+  "294": "strict",
+  "295": "strict",
+  "296": "fail",
+  "297": "strict",
+  "298": "fail",
+  "299": "fail",
+  "300": "fail"
  },
  "Blank lines": {
-  "188": true
+  "188": "strict"
  },
  "Block quotes": {
-  "189": true,
-  "190": true,
-  "191": true,
-  "192": true,
-  "193": true,
-  "194": true,
-  "195": true,
-  "196": true,
-  "197": true,
-  "198": false,
-  "199": false,
-  "200": true,
-  "201": true,
-  "202": true,
-  "203": true,
-  "204": true,
-  "205": true,
-  "206": true,
-  "207": true,
-  "208": true,
-  "209": true,
-  "210": false,
-  "211": true,
-  "212": true,
-  "213": true
+  "189": "loose",
+  "190": "loose",
+  "191": "loose",
+  "192": "strict",
+  "193": "loose",
+  "194": "loose",
+  "195": "loose",
+  "196": "loose",
+  "197": "loose",
+  "198": "fail",
+  "199": "fail",
+  "200": "loose",
+  "201": "loose",
+  "202": "loose",
+  "203": "loose",
+  "204": "loose",
+  "205": "loose",
+  "206": "loose",
+  "207": "loose",
+  "208": "loose",
+  "209": "loose",
+  "210": "fail",
+  "211": "loose",
+  "212": "loose",
+  "213": "loose"
  },
  "Code spans": {
-  "313": true,
-  "314": true,
-  "315": true,
-  "316": true,
-  "317": true,
-  "318": true,
-  "319": true,
-  "320": true,
-  "321": true,
-  "322": true,
-  "323": true,
-  "324": true,
-  "325": false,
-  "326": false,
-  "327": true
+  "313": "strict",
+  "314": "strict",
+  "315": "strict",
+  "316": "strict",
+  "317": "loose",
+  "318": "strict",
+  "319": "strict",
+  "320": "strict",
+  "321": "strict",
+  "322": "loose",
+  "323": "strict",
+  "324": "loose",
+  "325": "fail",
+  "326": "fail",
+  "327": "strict"
  },
  "Emphasis and strong emphasis": {
-  "328": true,
-  "329": true,
-  "330": false,
-  "331": false,
-  "332": true,
-  "333": true,
-  "334": true,
-  "335": false,
-  "336": true,
-  "337": true,
-  "338": true,
-  "339": false,
-  "340": true,
-  "341": true,
-  "342": true,
-  "343": false,
-  "344": false,
-  "345": false,
-  "346": false,
-  "347": true,
-  "348": false,
-  "349": true,
-  "350": true,
-  "351": true,
-  "352": false,
-  "353": true,
-  "354": true,
-  "355": true,
-  "356": false,
-  "357": false,
-  "358": true,
-  "359": true,
-  "360": false,
-  "361": false,
-  "362": true,
-  "363": true,
-  "364": true,
-  "365": false,
-  "366": true,
-  "367": true,
-  "368": false,
-  "369": false,
-  "370": false,
-  "371": true,
-  "372": true,
-  "373": true,
-  "374": false,
-  "375": true,
-  "376": true,
-  "377": true,
-  "378": false,
-  "379": true,
-  "380": true,
-  "381": true,
-  "382": true,
-  "383": true,
-  "384": true,
-  "385": false,
-  "386": false,
-  "387": false,
-  "388": false,
-  "389": false,
-  "390": false,
-  "391": false,
-  "392": false,
-  "393": false,
-  "394": false,
-  "395": true,
-  "396": false,
-  "397": true,
-  "398": true,
-  "399": true,
-  "400": true,
-  "401": false,
-  "402": false,
-  "403": true,
-  "404": true,
-  "405": true,
-  "406": true,
-  "407": false,
-  "408": true,
-  "409": true,
-  "410": false,
-  "411": true,
-  "412": true,
-  "413": true,
-  "414": false,
-  "415": true,
-  "416": true,
-  "417": false,
-  "418": true,
-  "419": false,
-  "420": false,
-  "421": true,
-  "422": true,
-  "423": true,
-  "424": true,
-  "425": true,
-  "426": false,
-  "427": true,
-  "428": true,
-  "429": false,
-  "430": true,
-  "431": true,
-  "432": false,
-  "433": true,
-  "434": true,
-  "435": true,
-  "436": true,
-  "437": true,
-  "438": true,
-  "439": false,
-  "440": false,
-  "441": false,
-  "442": true,
-  "443": false,
-  "444": true,
-  "445": false,
-  "446": true,
-  "447": true,
-  "448": false,
-  "449": false,
-  "450": true,
-  "451": true,
-  "452": true,
-  "453": true,
-  "454": true,
-  "455": true,
-  "456": true
+  "328": "strict",
+  "329": "strict",
+  "330": "fail",
+  "331": "fail",
+  "332": "strict",
+  "333": "strict",
+  "334": "strict",
+  "335": "fail",
+  "336": "loose",
+  "337": "strict",
+  "338": "strict",
+  "339": "fail",
+  "340": "loose",
+  "341": "strict",
+  "342": "strict",
+  "343": "fail",
+  "344": "fail",
+  "345": "fail",
+  "346": "fail",
+  "347": "strict",
+  "348": "fail",
+  "349": "strict",
+  "350": "strict",
+  "351": "strict",
+  "352": "fail",
+  "353": "strict",
+  "354": "strict",
+  "355": "strict",
+  "356": "fail",
+  "357": "fail",
+  "358": "strict",
+  "359": "strict",
+  "360": "fail",
+  "361": "fail",
+  "362": "loose",
+  "363": "strict",
+  "364": "strict",
+  "365": "fail",
+  "366": "strict",
+  "367": "strict",
+  "368": "fail",
+  "369": "fail",
+  "370": "fail",
+  "371": "strict",
+  "372": "loose",
+  "373": "strict",
+  "374": "fail",
+  "375": "strict",
+  "376": "strict",
+  "377": "strict",
+  "378": "fail",
+  "379": "strict",
+  "380": "strict",
+  "381": "strict",
+  "382": "strict",
+  "383": "strict",
+  "384": "strict",
+  "385": "fail",
+  "386": "fail",
+  "387": "fail",
+  "388": "fail",
+  "389": "fail",
+  "390": "fail",
+  "391": "fail",
+  "392": "fail",
+  "393": "fail",
+  "394": "fail",
+  "395": "strict",
+  "396": "fail",
+  "397": "strict",
+  "398": "strict",
+  "399": "strict",
+  "400": "strict",
+  "401": "fail",
+  "402": "fail",
+  "403": "strict",
+  "404": "strict",
+  "405": "strict",
+  "406": "strict",
+  "407": "fail",
+  "408": "strict",
+  "409": "strict",
+  "410": "fail",
+  "411": "strict",
+  "412": "strict",
+  "413": "strict",
+  "414": "fail",
+  "415": "strict",
+  "416": "strict",
+  "417": "fail",
+  "418": "strict",
+  "419": "fail",
+  "420": "fail",
+  "421": "strict",
+  "422": "strict",
+  "423": "strict",
+  "424": "strict",
+  "425": "strict",
+  "426": "fail",
+  "427": "strict",
+  "428": "strict",
+  "429": "fail",
+  "430": "loose",
+  "431": "loose",
+  "432": "fail",
+  "433": "loose",
+  "434": "loose",
+  "435": "strict",
+  "436": "strict",
+  "437": "strict",
+  "438": "strict",
+  "439": "fail",
+  "440": "fail",
+  "441": "fail",
+  "442": "strict",
+  "443": "fail",
+  "444": "strict",
+  "445": "fail",
+  "446": "loose",
+  "447": "loose",
+  "448": "fail",
+  "449": "fail",
+  "450": "strict",
+  "451": "strict",
+  "452": "strict",
+  "453": "strict",
+  "454": "strict",
+  "455": "strict",
+  "456": "strict"
  },
  "Entity and numeric character references": {
-  "301": true,
-  "302": true,
-  "303": true,
-  "304": true,
-  "305": true,
-  "306": true,
-  "307": true,
-  "308": false,
-  "309": false,
-  "310": true,
-  "311": true,
-  "312": true
+  "301": "loose",
+  "302": "loose",
+  "303": "loose",
+  "304": "loose",
+  "305": "strict",
+  "306": "loose",
+  "307": "strict",
+  "308": "fail",
+  "309": "fail",
+  "310": "loose",
+  "311": "strict",
+  "312": "strict"
  },
  "Fenced code blocks": {
-  "88": true,
-  "89": true,
-  "90": true,
-  "91": true,
-  "92": true,
-  "93": true,
-  "94": true,
-  "95": true,
-  "96": true,
-  "97": true,
-  "98": true,
-  "99": true,
-  "100": true,
-  "101": true,
-  "102": true,
-  "103": true,
-  "104": true,
-  "105": true,
-  "106": false,
-  "107": true,
-  "108": true,
-  "109": true,
-  "110": true,
-  "111": true,
-  "112": true,
-  "113": false,
-  "114": false
+  "88": "strict",
+  "89": "strict",
+  "90": "strict",
+  "91": "strict",
+  "92": "strict",
+  "93": "strict",
+  "94": "loose",
+  "95": "loose",
+  "96": "loose",
+  "97": "strict",
+  "98": "strict",
+  "99": "loose",
+  "100": "loose",
+  "101": "loose",
+  "102": "strict",
+  "103": "strict",
+  "104": "strict",
+  "105": "loose",
+  "106": "fail",
+  "107": "loose",
+  "108": "strict",
+  "109": "strict",
+  "110": "strict",
+  "111": "strict",
+  "112": "strict",
+  "113": "fail",
+  "114": "fail"
  },
  "Hard line breaks": {
-  "600": true,
-  "601": true,
-  "602": true,
-  "603": true,
-  "604": true,
-  "605": true,
-  "606": true,
-  "607": true,
-  "608": true,
-  "609": true,
-  "610": true,
-  "611": true,
-  "612": true,
-  "613": true,
-  "614": true
+  "600": "strict",
+  "601": "strict",
+  "602": "strict",
+  "603": "loose",
+  "604": "loose",
+  "605": "strict",
+  "606": "strict",
+  "607": "loose",
+  "608": "loose",
+  "609": "strict",
+  "610": "strict",
+  "611": "strict",
+  "612": "loose",
+  "613": "strict",
+  "614": "strict"
  },
  "HTML blocks": {
-  "115": true,
-  "116": true,
-  "117": true,
-  "118": true,
-  "119": true,
-  "120": true,
-  "121": true,
-  "122": true,
-  "123": true,
-  "124": true,
-  "125": true,
-  "126": true,
-  "127": true,
-  "128": true,
-  "129": true,
-  "130": true,
-  "131": true,
-  "132": true,
-  "133": true,
-  "134": true,
-  "135": true,
-  "136": true,
-  "137": true,
-  "138": true,
-  "139": true,
-  "140": true,
-  "141": true,
-  "142": true,
-  "143": true,
-  "144": true,
-  "145": true,
-  "146": true,
-  "147": true,
-  "148": true,
-  "149": true,
-  "150": true,
-  "151": true,
-  "152": true,
-  "153": true,
-  "154": true,
-  "155": true,
-  "156": true
+  "115": "strict",
+  "116": "strict",
+  "117": "strict",
+  "118": "loose",
+  "119": "strict",
+  "120": "strict",
+  "121": "strict",
+  "122": "strict",
+  "123": "strict",
+  "124": "strict",
+  "125": "strict",
+  "126": "strict",
+  "127": "strict",
+  "128": "strict",
+  "129": "strict",
+  "130": "strict",
+  "131": "strict",
+  "132": "strict",
+  "133": "loose",
+  "134": "strict",
+  "135": "strict",
+  "136": "strict",
+  "137": "strict",
+  "138": "loose",
+  "139": "loose",
+  "140": "loose",
+  "141": "strict",
+  "142": "strict",
+  "143": "strict",
+  "144": "strict",
+  "145": "strict",
+  "146": "strict",
+  "147": "strict",
+  "148": "strict",
+  "149": "strict",
+  "150": "loose",
+  "151": "strict",
+  "152": "strict",
+  "153": "loose",
+  "154": "strict",
+  "155": "loose",
+  "156": "loose"
  },
  "Images": {
-  "538": true,
-  "539": true,
-  "540": false,
-  "541": true,
-  "542": true,
-  "543": true,
-  "544": true,
-  "545": true,
-  "546": true,
-  "547": true,
-  "548": true,
-  "549": true,
-  "550": true,
-  "551": true,
-  "552": true,
-  "553": true,
-  "554": true,
-  "555": true,
-  "556": true,
-  "557": true,
-  "558": true,
-  "559": true
+  "538": "loose",
+  "539": "loose",
+  "540": "fail",
+  "541": "loose",
+  "542": "loose",
+  "543": "loose",
+  "544": "loose",
+  "545": "loose",
+  "546": "loose",
+  "547": "loose",
+  "548": "loose",
+  "549": "loose",
+  "550": "loose",
+  "551": "loose",
+  "552": "loose",
+  "553": "loose",
+  "554": "loose",
+  "555": "loose",
+  "556": "loose",
+  "557": "loose",
+  "558": "strict",
+  "559": "strict"
  },
  "Indented code blocks": {
-  "76": true,
-  "77": true,
-  "78": true,
-  "79": true,
-  "80": false,
-  "81": true,
-  "82": true,
-  "83": true,
-  "84": false,
-  "85": true,
-  "86": true,
-  "87": true
+  "76": "strict",
+  "77": "loose",
+  "78": "loose",
+  "79": "strict",
+  "80": "fail",
+  "81": "strict",
+  "82": "loose",
+  "83": "strict",
+  "84": "fail",
+  "85": "strict",
+  "86": "loose",
+  "87": "strict"
  },
  "Inlines": {
-  "287": true
+  "287": "strict"
  },
  "Link reference definitions": {
-  "157": true,
-  "158": true,
-  "159": false,
-  "160": true,
-  "161": true,
-  "162": true,
-  "163": true,
-  "164": true,
-  "165": false,
-  "166": true,
-  "167": true,
-  "168": true,
-  "169": false,
-  "170": true,
-  "171": true,
-  "172": true,
-  "173": true,
-  "174": true,
-  "175": true,
-  "176": true,
-  "177": true,
-  "178": true,
-  "179": true
+  "157": "strict",
+  "158": "strict",
+  "159": "fail",
+  "160": "strict",
+  "161": "strict",
+  "162": "strict",
+  "163": "strict",
+  "164": "strict",
+  "165": "fail",
+  "166": "strict",
+  "167": "strict",
+  "168": "strict",
+  "169": "fail",
+  "170": "loose",
+  "171": "strict",
+  "172": "loose",
+  "173": "loose",
+  "174": "loose",
+  "175": "strict",
+  "176": "strict",
+  "177": "loose",
+  "178": "strict",
+  "179": "loose"
  },
  "Links": {
-  "457": true,
-  "458": true,
-  "459": true,
-  "460": true,
-  "461": true,
-  "462": true,
-  "463": true,
-  "464": false,
-  "465": false,
-  "466": false,
-  "467": false,
-  "468": false,
-  "469": false,
-  "470": false,
-  "471": true,
-  "472": false,
-  "473": false,
-  "474": false,
-  "475": false,
-  "476": false,
-  "477": true,
-  "478": false,
-  "479": false,
-  "480": true,
-  "481": false,
-  "482": true,
-  "483": true,
-  "484": true,
-  "485": false,
-  "486": true,
-  "487": false,
-  "488": false,
-  "489": false,
-  "490": false,
-  "491": true,
-  "492": true,
-  "493": true,
-  "494": true,
-  "495": false,
-  "496": true,
-  "497": true,
-  "498": true,
-  "499": false,
-  "500": true,
-  "501": true,
-  "502": false,
-  "503": false,
-  "504": true,
-  "505": true,
-  "506": true,
-  "507": false,
-  "508": true,
-  "509": true,
-  "510": false,
-  "511": true,
-  "512": true,
-  "513": true,
-  "514": true,
-  "515": false,
-  "516": true,
-  "517": true,
-  "518": true,
-  "519": true,
-  "520": true,
-  "521": true,
-  "522": true,
-  "523": true,
-  "524": true,
-  "525": true,
-  "526": true,
-  "527": true,
-  "528": true,
-  "529": true,
-  "530": true,
-  "531": true,
-  "532": true,
-  "533": false,
-  "534": true,
-  "535": true,
-  "536": true,
-  "537": true
+  "457": "strict",
+  "458": "strict",
+  "459": "strict",
+  "460": "strict",
+  "461": "strict",
+  "462": "loose",
+  "463": "strict",
+  "464": "fail",
+  "465": "fail",
+  "466": "fail",
+  "467": "fail",
+  "468": "fail",
+  "469": "fail",
+  "470": "fail",
+  "471": "strict",
+  "472": "fail",
+  "473": "fail",
+  "474": "fail",
+  "475": "fail",
+  "476": "fail",
+  "477": "loose",
+  "478": "fail",
+  "479": "fail",
+  "480": "strict",
+  "481": "fail",
+  "482": "strict",
+  "483": "strict",
+  "484": "strict",
+  "485": "fail",
+  "486": "loose",
+  "487": "fail",
+  "488": "fail",
+  "489": "fail",
+  "490": "fail",
+  "491": "strict",
+  "492": "strict",
+  "493": "strict",
+  "494": "strict",
+  "495": "fail",
+  "496": "strict",
+  "497": "loose",
+  "498": "strict",
+  "499": "fail",
+  "500": "loose",
+  "501": "loose",
+  "502": "fail",
+  "503": "fail",
+  "504": "strict",
+  "505": "strict",
+  "506": "strict",
+  "507": "fail",
+  "508": "strict",
+  "509": "strict",
+  "510": "fail",
+  "511": "strict",
+  "512": "strict",
+  "513": "strict",
+  "514": "strict",
+  "515": "fail",
+  "516": "strict",
+  "517": "strict",
+  "518": "strict",
+  "519": "strict",
+  "520": "strict",
+  "521": "loose",
+  "522": "strict",
+  "523": "strict",
+  "524": "strict",
+  "525": "loose",
+  "526": "strict",
+  "527": "strict",
+  "528": "strict",
+  "529": "strict",
+  "530": "strict",
+  "531": "strict",
+  "532": "strict",
+  "533": "fail",
+  "534": "strict",
+  "535": "loose",
+  "536": "strict",
+  "537": "loose"
  },
  "List items": {
-  "214": true,
-  "215": true,
-  "216": true,
-  "217": true,
-  "218": true,
-  "219": true,
-  "220": true,
-  "221": true,
-  "222": true,
-  "223": false,
-  "224": true,
-  "225": false,
-  "226": false,
-  "227": true,
-  "228": false,
-  "229": false,
-  "230": true,
-  "231": true,
-  "232": false,
-  "233": true,
-  "234": false,
-  "235": false,
-  "236": true,
-  "237": true,
-  "238": true,
-  "239": false,
-  "240": false,
-  "241": false,
-  "242": false,
-  "243": false,
-  "244": false,
-  "245": true,
-  "246": false,
-  "247": true,
-  "248": true,
-  "249": true,
-  "250": true,
-  "251": true,
-  "252": true,
-  "253": true,
-  "254": true,
-  "255": true,
-  "256": true,
-  "257": false,
-  "258": false,
-  "259": true,
-  "260": false,
-  "261": true
+  "214": "loose",
+  "215": "loose",
+  "216": "loose",
+  "217": "loose",
+  "218": "loose",
+  "219": "loose",
+  "220": "loose",
+  "221": "loose",
+  "222": "strict",
+  "223": "fail",
+  "224": "loose",
+  "225": "fail",
+  "226": "fail",
+  "227": "strict",
+  "228": "fail",
+  "229": "fail",
+  "230": "strict",
+  "231": "loose",
+  "232": "fail",
+  "233": "strict",
+  "234": "fail",
+  "235": "fail",
+  "236": "loose",
+  "237": "loose",
+  "238": "loose",
+  "239": "fail",
+  "240": "fail",
+  "241": "fail",
+  "242": "fail",
+  "243": "fail",
+  "244": "fail",
+  "245": "loose",
+  "246": "fail",
+  "247": "loose",
+  "248": "loose",
+  "249": "loose",
+  "250": "strict",
+  "251": "loose",
+  "252": "loose",
+  "253": "loose",
+  "254": "loose",
+  "255": "loose",
+  "256": "loose",
+  "257": "fail",
+  "258": "fail",
+  "259": "loose",
+  "260": "fail",
+  "261": "loose"
  },
  "Lists": {
-  "262": true,
-  "263": false,
-  "264": true,
-  "265": true,
-  "266": false,
-  "267": true,
-  "268": false,
-  "269": false,
-  "270": true,
-  "271": true,
-  "272": false,
-  "273": false,
-  "274": true,
-  "275": true,
-  "276": true,
-  "277": true,
-  "278": false,
-  "279": true,
-  "280": true,
-  "281": true,
-  "282": true,
-  "283": true,
-  "284": true,
-  "285": false,
-  "286": true
+  "262": "loose",
+  "263": "fail",
+  "264": "loose",
+  "265": "loose",
+  "266": "fail",
+  "267": "loose",
+  "268": "fail",
+  "269": "fail",
+  "270": "loose",
+  "271": "loose",
+  "272": "fail",
+  "273": "fail",
+  "274": "loose",
+  "275": "loose",
+  "276": "loose",
+  "277": "loose",
+  "278": "fail",
+  "279": "loose",
+  "280": "loose",
+  "281": "loose",
+  "282": "loose",
+  "283": "loose",
+  "284": "loose",
+  "285": "fail",
+  "286": "loose"
  },
  "Paragraphs": {
-  "180": true,
-  "181": true,
-  "182": true,
-  "183": true,
-  "184": true,
-  "185": true,
-  "186": true,
-  "187": true
+  "180": "strict",
+  "181": "strict",
+  "182": "strict",
+  "183": "loose",
+  "184": "loose",
+  "185": "loose",
+  "186": "strict",
+  "187": "loose"
  },
  "Precedence": {
-  "12": true
+  "12": "loose"
  },
  "Raw HTML": {
-  "579": true,
-  "580": false,
-  "581": false,
-  "582": true,
-  "583": true,
-  "584": true,
-  "585": false,
-  "586": true,
-  "587": true,
-  "588": false,
-  "589": true,
-  "590": false,
-  "591": true,
-  "592": true,
-  "593": true,
-  "594": true,
-  "595": true,
-  "596": true,
-  "597": true,
-  "598": true,
-  "599": false
+  "579": "strict",
+  "580": "fail",
+  "581": "fail",
+  "582": "strict",
+  "583": "strict",
+  "584": "loose",
+  "585": "fail",
+  "586": "loose",
+  "587": "loose",
+  "588": "fail",
+  "589": "strict",
+  "590": "fail",
+  "591": "loose",
+  "592": "loose",
+  "593": "loose",
+  "594": "strict",
+  "595": "strict",
+  "596": "loose",
+  "597": "strict",
+  "598": "strict",
+  "599": "fail"
  },
  "Setext headings": {
-  "50": true,
-  "51": false,
-  "52": true,
-  "53": false,
-  "54": true,
-  "55": false,
-  "56": true,
-  "57": true,
-  "58": true,
-  "59": true,
-  "60": true,
-  "61": true,
-  "62": false,
-  "63": true,
-  "64": false,
-  "65": true,
-  "66": true,
-  "67": true,
-  "68": true,
-  "69": false,
-  "70": true,
-  "71": true,
-  "72": true,
-  "73": true,
-  "74": true,
-  "75": true
+  "50": "strict",
+  "51": "fail",
+  "52": "strict",
+  "53": "fail",
+  "54": "strict",
+  "55": "fail",
+  "56": "loose",
+  "57": "strict",
+  "58": "loose",
+  "59": "strict",
+  "60": "loose",
+  "61": "loose",
+  "62": "fail",
+  "63": "loose",
+  "64": "fail",
+  "65": "strict",
+  "66": "strict",
+  "67": "strict",
+  "68": "loose",
+  "69": "fail",
+  "70": "loose",
+  "71": "loose",
+  "72": "strict",
+  "73": "strict",
+  "74": "strict",
+  "75": "strict"
  },
  "Soft line breaks": {
-  "615": true,
-  "616": true
+  "615": "strict",
+  "616": "loose"
  },
  "Tabs": {
-  "1": true,
-  "2": false,
-  "3": true,
-  "4": false,
-  "5": false,
-  "6": true,
-  "7": true,
-  "8": true,
-  "9": false,
-  "10": true,
-  "11": false
+  "1": "strict",
+  "2": "fail",
+  "3": "strict",
+  "4": "fail",
+  "5": "fail",
+  "6": "loose",
+  "7": "loose",
+  "8": "strict",
+  "9": "fail",
+  "10": "strict",
+  "11": "fail"
  },
  "Textual content": {
-  "617": true,
-  "618": true,
-  "619": true
+  "617": "strict",
+  "618": "strict",
+  "619": "strict"
  },
  "Thematic breaks": {
-  "13": true,
-  "14": true,
-  "15": true,
-  "16": true,
-  "17": true,
-  "18": true,
-  "19": true,
-  "20": true,
-  "21": true,
-  "22": true,
-  "23": true,
-  "24": true,
-  "25": false,
-  "26": true,
-  "27": true,
-  "28": true,
-  "29": true,
-  "30": false,
-  "31": true
+  "13": "strict",
+  "14": "strict",
+  "15": "strict",
+  "16": "strict",
+  "17": "strict",
+  "18": "strict",
+  "19": "loose",
+  "20": "strict",
+  "21": "strict",
+  "22": "strict",
+  "23": "strict",
+  "24": "strict",
+  "25": "fail",
+  "26": "loose",
+  "27": "loose",
+  "28": "strict",
+  "29": "strict",
+  "30": "fail",
+  "31": "loose"
  }
 }