| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | 
							- // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 
- // for details. All rights reserved. Use of this source code is governed by a
 
- // BSD-style license that can be found in the LICENSE file.
 
- import 'ast.dart';
 
- import 'block_parser.dart';
 
- import 'extension_set.dart';
 
- import 'inline_parser.dart';
 
- /// Maintains the context needed to parse a Markdown document.
 
- class Document {
 
-   Document({
 
-     Iterable<BlockSyntax>? blockSyntaxes,
 
-     Iterable<InlineSyntax>? inlineSyntaxes,
 
-     ExtensionSet? extensionSet,
 
-     this.linkResolver,
 
-     this.imageLinkResolver,
 
-   }) : extensionSet = extensionSet ?? ExtensionSet.commonMark {
 
-     _blockSyntaxes
 
-       ..addAll(blockSyntaxes ?? [])
 
-       ..addAll(this.extensionSet.blockSyntaxes);
 
-     _inlineSyntaxes
 
-       ..addAll(inlineSyntaxes ?? [])
 
-       ..addAll(this.extensionSet.inlineSyntaxes);
 
-   }
 
-   final Map<String, LinkReference> linkReferences = <String, LinkReference>{};
 
-   final ExtensionSet extensionSet;
 
-   final Resolver? linkResolver;
 
-   final Resolver? imageLinkResolver;
 
-   final _blockSyntaxes = <BlockSyntax>{};
 
-   final _inlineSyntaxes = <InlineSyntax>{};
 
-   Iterable<BlockSyntax> get blockSyntaxes => _blockSyntaxes;
 
-   Iterable<InlineSyntax> get inlineSyntaxes => _inlineSyntaxes;
 
-   /// Parses the given [lines] of Markdown to a series of AST nodes.
 
-   List<Node> parseLines(List<String> lines) {
 
-     final nodes = BlockParser(lines, this).parseLines();
 
-     // Make sure to mark the top level nodes as such.
 
-     for (final n in nodes) {
 
-       n.isToplevel = true;
 
-     }
 
-     _parseInlineContent(nodes);
 
-     return nodes;
 
-   }
 
-   /// Parses the given inline Markdown [text] to a series of AST nodes.
 
-   List<Node>? parseInline(String text) => InlineParser(text, this).parse();
 
-   void _parseInlineContent(List<Node> nodes) {
 
-     for (var i = 0; i < nodes.length; i++) {
 
-       final node = nodes[i];
 
-       if (node is UnparsedContent) {
 
-         final inlineNodes = parseInline(node.textContent)!;
 
-         nodes
 
-           ..removeAt(i)
 
-           ..insertAll(i, inlineNodes);
 
-         i += inlineNodes.length - 1;
 
-       } else if (node is Element && node.children != null) {
 
-         _parseInlineContent(node.children!);
 
-       }
 
-     }
 
-   }
 
- }
 
- /// A [link reference
 
- /// definition](http://spec.commonmark.org/0.28/#link-reference-definitions).
 
- class LinkReference {
 
-   /// Construct a [LinkReference], with all necessary fields.
 
-   ///
 
-   /// If the parsed link reference definition does not include a title, use
 
-   /// `null` for the [title] parameter.
 
-   LinkReference(this.label, this.destination, this.title);
 
-   /// The [link label](http://spec.commonmark.org/0.28/#link-label).
 
-   ///
 
-   /// Temporarily, this class is also being used to represent the link data for
 
-   /// an inline link (the destination and title), but this should change before
 
-   /// the package is released.
 
-   final String label;
 
-   /// The [link destination](http://spec.commonmark.org/0.28/#link-destination).
 
-   final String destination;
 
-   /// The [link title](http://spec.commonmark.org/0.28/#link-title).
 
-   final String title;
 
- }
 
 
  |