Merge pull request dart-lang/markdown#56 from srawlins/iterable-extension-collections
Prevent duplicate syntaxes from being added to a document
diff --git a/pkgs/markdown/lib/src/document.dart b/pkgs/markdown/lib/src/document.dart
index e8b470b..fc5fa82 100644
--- a/pkgs/markdown/lib/src/document.dart
+++ b/pkgs/markdown/lib/src/document.dart
@@ -8,23 +8,25 @@
/// Maintains the context needed to parse a Markdown document.
class Document {
final Map<String, Link> refLinks = {};
- List<BlockSyntax> blockSyntaxes;
- List<InlineSyntax> inlineSyntaxes;
+ Iterable<BlockSyntax> blockSyntaxes;
+ Iterable<InlineSyntax> inlineSyntaxes;
ExtensionSet extensionSet;
Resolver linkResolver;
Resolver imageLinkResolver;
Document(
- {this.blockSyntaxes,
- this.inlineSyntaxes,
- extensionSet,
+ {Iterable<BlockSyntax> blockSyntaxes,
+ Iterable<InlineSyntax> inlineSyntaxes,
+ ExtensionSet extensionSet,
this.linkResolver,
this.imageLinkResolver}) {
- blockSyntaxes ??= [];
- inlineSyntaxes ??= [];
extensionSet ??= ExtensionSet.commonMark;
- blockSyntaxes.addAll(extensionSet.blockSyntaxes);
- inlineSyntaxes.addAll(extensionSet.inlineSyntaxes);
+ this.blockSyntaxes = new Set()
+ ..addAll(blockSyntaxes ?? [])
+ ..addAll(extensionSet.blockSyntaxes);
+ this.inlineSyntaxes = new Set()
+ ..addAll(inlineSyntaxes ?? [])
+ ..addAll(extensionSet.inlineSyntaxes);
}
parseRefLinks(List<String> lines) {
diff --git a/pkgs/markdown/lib/src/html_renderer.dart b/pkgs/markdown/lib/src/html_renderer.dart
index 399f992..aa17d5e 100644
--- a/pkgs/markdown/lib/src/html_renderer.dart
+++ b/pkgs/markdown/lib/src/html_renderer.dart
@@ -13,8 +13,8 @@
/// Converts the given string of markdown to HTML.
String markdownToHtml(String markdown,
- {List<BlockSyntax> blockSyntaxes,
- List<InlineSyntax> inlineSyntaxes,
+ {Iterable<BlockSyntax> blockSyntaxes,
+ Iterable<InlineSyntax> inlineSyntaxes,
ExtensionSet extensionSet,
Resolver linkResolver,
Resolver imageLinkResolver,
diff --git a/pkgs/markdown/test/util.dart b/pkgs/markdown/test/util.dart
index e9bd5a8..dfec203 100644
--- a/pkgs/markdown/test/util.dart
+++ b/pkgs/markdown/test/util.dart
@@ -26,25 +26,18 @@
// Locate the "test" directory. Use mirrors so that this works with the test
// package, which loads this suite into an isolate.
-String get _testDir => p.dirname(currentMirrorSystem()
- .findLibrary(#markdown.test.util)
- .uri
- .path);
+String get _testDir =>
+ p.dirname(currentMirrorSystem().findLibrary(#markdown.test.util).uri.path);
void testFile(String file,
- {List<BlockSyntax> blockSyntaxes,
- List<InlineSyntax> inlineSyntaxes}) =>
- testUnitFile(
- file,
- new File(p.join(_testDir, file)),
- blockSyntaxes: blockSyntaxes,
- inlineSyntaxes: inlineSyntaxes);
+ {Iterable<BlockSyntax> blockSyntaxes,
+ Iterable<InlineSyntax> inlineSyntaxes}) =>
+ testUnitFile(file, new File(p.join(_testDir, file)),
+ blockSyntaxes: blockSyntaxes, inlineSyntaxes: inlineSyntaxes);
-void testUnitFile(
- String directory,
- File entry,
- {List<BlockSyntax> blockSyntaxes,
- List<InlineSyntax> inlineSyntaxes}) {
+void testUnitFile(String directory, File entry,
+ {Iterable<BlockSyntax> blockSyntaxes,
+ Iterable<InlineSyntax> inlineSyntaxes}) {
group('$directory ${p.basename(entry.path)}', () {
var lines = entry.readAsLinesSync();
@@ -76,23 +69,15 @@
expectedOutput += lines[i] + "\n";
}
- validateCore(
- description,
- input,
- expectedOutput,
- blockSyntaxes: blockSyntaxes,
- inlineSyntaxes: inlineSyntaxes
- );
+ validateCore(description, input, expectedOutput,
+ blockSyntaxes: blockSyntaxes, inlineSyntaxes: inlineSyntaxes);
}
});
}
-void validateCore(
- String description,
- String markdown,
- String html,
- {List<BlockSyntax> blockSyntaxes,
- List<InlineSyntax> inlineSyntaxes,
+void validateCore(String description, String markdown, String html,
+ {Iterable<BlockSyntax> blockSyntaxes,
+ Iterable<InlineSyntax> inlineSyntaxes,
Resolver linkResolver,
Resolver imageLinkResolver,
bool inlineOnly: false}) {