Fixed ImageLinkSyntax Resolver
diff --git a/pkgs/markdown/lib/src/document.dart b/pkgs/markdown/lib/src/document.dart index 7ed01ca..4724208 100644 --- a/pkgs/markdown/lib/src/document.dart +++ b/pkgs/markdown/lib/src/document.dart
@@ -9,8 +9,9 @@ final Map<String, Link> refLinks; List<InlineSyntax> inlineSyntaxes; Resolver linkResolver; + Resolver imageLinkResolver; - Document({this.inlineSyntaxes, this.linkResolver}) + Document({this.inlineSyntaxes, this.linkResolver, this.imageLinkResolver}) : refLinks = <String, Link>{}; parseRefLinks(List<String> lines) {
diff --git a/pkgs/markdown/lib/src/html_renderer.dart b/pkgs/markdown/lib/src/html_renderer.dart index 97b900b..7dd1f9b 100644 --- a/pkgs/markdown/lib/src/html_renderer.dart +++ b/pkgs/markdown/lib/src/html_renderer.dart
@@ -6,12 +6,13 @@ import 'ast.dart'; import 'document.dart'; +import 'inline_parser.dart'; /// Converts the given string of markdown to HTML. -String markdownToHtml(String markdown, {inlineSyntaxes, linkResolver, - bool inlineOnly: false}) { +String markdownToHtml(String markdown, {List<InlineSyntax> inlineSyntaxes, + Resolver linkResolver, Resolver imageLinkResolver, bool inlineOnly: false}) { var document = new Document(inlineSyntaxes: inlineSyntaxes, - linkResolver: linkResolver); + imageLinkResolver: imageLinkResolver, linkResolver: linkResolver); if (inlineOnly) { return renderToHtml(document.parseInline(markdown));
diff --git a/pkgs/markdown/lib/src/inline_parser.dart b/pkgs/markdown/lib/src/inline_parser.dart index 8bab6ba..e852384 100644 --- a/pkgs/markdown/lib/src/inline_parser.dart +++ b/pkgs/markdown/lib/src/inline_parser.dart
@@ -84,7 +84,7 @@ // Custom link resolvers goes after the generic text syntax. syntaxes.insertAll(1, [ new LinkSyntax(linkResolver: document.linkResolver), - new ImageLinkSyntax(linkResolver: document.linkResolver) + new ImageLinkSyntax(linkResolver: document.imageLinkResolver) ]); } @@ -251,6 +251,9 @@ class LinkSyntax extends TagSyntax { final Resolver linkResolver; + /// Weather or not this link was resolved by a [Resolver] + bool resolved = false; + /// The regex for the end of a link needs to handle both reference style and /// inline styles as well as optional titles for inline links. To make that /// a bit more palatable, this breaks it into pieces. @@ -289,6 +292,7 @@ (oldVal, child) => oldVal + child.text); // See if we have a resolver that will generate a link for us. + resolved = true; return linkResolver(textToResolve); } else { Link link = getLink(parser, match, state); @@ -345,8 +349,9 @@ ImageLinkSyntax({this.linkResolver}) : super(pattern: r'!\['); - Element createNode(InlineParser parser, Match match, TagState state) { - Element node = super.createNode(parser, match, state); + Node createNode(InlineParser parser, Match match, TagState state) { + Node node = super.createNode(parser, match, state); + if (resolved) return node; if (node == null) return null; final Element imageElement = new Element.withTag("img")
diff --git a/pkgs/markdown/pubspec.yaml b/pkgs/markdown/pubspec.yaml index e07d943..3426132 100644 --- a/pkgs/markdown/pubspec.yaml +++ b/pkgs/markdown/pubspec.yaml
@@ -1,5 +1,5 @@ name: markdown -version: 0.7.0 +version: 0.7.1 author: Dart Team <misc@dartlang.org> description: A library for converting markdown to HTML. homepage: https://github.com/dpeek/dart-markdown @@ -7,3 +7,4 @@ sdk: '>=1.0.0 <2.0.0' dev_dependencies: unittest: '>=0.9.0 <0.11.0' +
diff --git a/pkgs/markdown/test/markdown_test.dart b/pkgs/markdown/test/markdown_test.dart index e1cc81f..bb1a7cc 100644 --- a/pkgs/markdown/test/markdown_test.dart +++ b/pkgs/markdown/test/markdown_test.dart
@@ -952,11 +952,16 @@ group('Resolver', () { var nyanResolver = (text) => new Text('~=[,,_${text}_,,]:3'); - validate('simple resolver', ''' + validate('simple link resolver', ''' resolve [this] thing ''', ''' <p>resolve ~=[,,_this_,,]:3 thing</p> ''', linkResolver: nyanResolver); + validate('simple image resolver', ''' + resolve ![this] thing + ''', ''' + <p>resolve ~=[,,_this_,,]:3 thing</p> + ''', imageLinkResolver: nyanResolver); }); group('Custom inline syntax', () { @@ -1048,14 +1053,15 @@ } void validate(String description, String markdown, String html, - {bool verbose: false, inlineSyntaxes, linkResolver, - bool inlineOnly: false}) { + {bool verbose: false, List<InlineSyntax> inlineSyntaxes, + Resolver linkResolver, Resolver imageLinkResolver, bool inlineOnly: false}) { test(description, () { markdown = cleanUpLiteral(markdown); html = cleanUpLiteral(html); var result = markdownToHtml(markdown, inlineSyntaxes: inlineSyntaxes, - linkResolver: linkResolver, inlineOnly: inlineOnly); + linkResolver: linkResolver, imageLinkResolver: imageLinkResolver, + inlineOnly: inlineOnly); var passed = compareOutput(html, result); if (!passed) {