anchor.diff:      if (!labelRes.isSuccess) {
         return labelRes;
       }
  +
  +    Inlines linkInlines = inlines.parse(labelRes.value);
  +    if (_isContainsLink(linkInlines)) {
  +      List<Inline> resValue = [new Str('[')];
  +      resValue.addAll(linkInlines);
  +      resValue.add(new Str(']'));
  +      return labelRes.copy(value: resValue);
  +    }
  +
       // Try inline link
       ParseResult destRes = linkInline.run(s, labelRes.position);
       if (destRes.isSuccess) {
         // Links inside link content are not allowed
  -      return destRes.copy(value: [new InlineLink(inlines(noLinks: true).parse(labelRes.value), destRes.value)]);
  +      return destRes.copy(value: [new InlineLink(linkInlines, destRes.value)]);
       }
       // Try reference link
       ParseResult refRes = ((blankline | whitespace).maybe > linkLabel).run(s, labelRes.position);
  
positive.code:   }
  
    Inlines _parseInlines(String raw) {
      return inlines().parse(raw);
    }
  
    //
  
negative.code:   static final Parser str = (noneOf(_strSpecialChars).many1 ^ (chars) => [new Str(chars.join())]) |
      (oneOf(_strSpecialChars) ^ (chars) => [new Str(chars)]);
  
    Parser<List<Inline>> get inline => choice([
        lineBreak,
        whitespace,
        escapedChar,
        htmlEntity,
        inlineCode,
        emphasis,
        link,
        image,
        autolink,
        rawInlineHtml,
        str
    ]);
  
    Parser<Inlines> get inlines => inline.manyUntil(eof) ^ (res) => processParsedInlines(res);
  
    //
    // Blocks
  