anchor.diff:      String inlines = writeInlines(link.label);
       if (link is InlineLink) {
         return '[${inlines}](${_writeTarget(link.target)})';
  -    } else if (link is ReferenceLink) {
  +    }
  +    if (link is ReferenceLink) {
         _references[link.reference] = link.target;
         return '[${inlines}]' + (inlines.toUpperCase() != link.reference.toUpperCase() ? '[${link.reference}]' : '');
       }
   
       // Autolink
  +    if (link.label.length > 0 && link.label[0] is Str) {
  +      return '<' + link.label[0].contents + '>';
  +    }
       return '<' + link.target.link + '>';
     }
   
     String writeImage(Image image) {
  -    return '![${writeInlines(image.label)}](${image.target.link})';
  +    return '![${writeInlines(image.label)}](${_writeTarget(image.target)})';
     }
   
     String _writeReferences() {
  
positive.code:   String writeHeader(Header header) {
      String inlines = writeInlines(header.contents);
      if (header is SetextHeader && header.level == 2) {
        return inlines + "\n" + (header.level == 1 ? '=' : '-') * inlines.length;
      }
      return "#" * header.level + " " + inlines + "\n";
    }
  
negative.code:     String result = "";
      list.items.forEach((ListItem listItem) {
        String pad;
        String contents = writeBlocks(listItem.contents, tight: list.tight, unorderedListChar: list.bulletType.char);
        contents = contents.splitMapJoin("\n", onNonMatch: (String str) {
          if (pad == null) {
            String marker = list.bulletType.char + " ";
  