// Copyright (c) 2012, 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.

/// Parses text in a Markdown-like format building an
/// [AST tree](https://en.wikipedia.org/wiki/Abstract_syntax_tree)
/// that can then be rendered to HTML.
///
/// If you are only interested in rendering Markdown to HTML please refer
/// to the [README](../index.html) which explains the use of [markdownToHtml()].
///
/// The main entrypoint to the library is the [Document] which encapsulates the
/// parsing process converting a Markdown text into a tree of [Node] (`List<Node>`).
///
/// Two main parsing mechanics are used:
///
/// - Blocks, representing top level elements like: headers, paragraphs, blockquotes,
///   code blocks, ... implemented via [BlockSyntax] subclasses.
/// - Inlines, representing chunks of text within a block with special meaning, like:
///   links, emphasis, inlined code, ... implemented via [InlineSyntax] subclasses.
///
/// Looking closely at [Document.new()] a few other concepts merit a mention:
///
/// - [ExtensionSet] that provide configurations for common Markdown flavors
/// - [Resolver] which aid in resolving links and images
///
/// If you are looking at extending the library to support custom formatting
/// what you may want is to:
///
/// - Implement your own [InlineSyntax] subclasses
/// - Implement your own [BlockSyntax] subclasses
/// - Instruct the library to use those by:
///   - Creating a new [ExtensionSet] from one of the existing flavors adding your syntaxes
///   - Passing your syntaxes to [Document] or [markdownToHtml()] as parameters.
library markdown;

import 'src/version.dart';

export 'src/ast.dart';
export 'src/block_parser.dart';
export 'src/block_syntaxes/block_syntax.dart';
export 'src/block_syntaxes/blockquote_syntax.dart';
export 'src/block_syntaxes/code_block_syntax.dart';
export 'src/block_syntaxes/dummy_block_syntax.dart';
export 'src/block_syntaxes/empty_block_syntax.dart';
export 'src/block_syntaxes/fenced_blockquote_syntax.dart';
export 'src/block_syntaxes/fenced_code_block_syntax.dart';
export 'src/block_syntaxes/header_syntax.dart';
export 'src/block_syntaxes/header_with_id_syntax.dart';
export 'src/block_syntaxes/horizontal_rule_syntax.dart';
export 'src/block_syntaxes/html_block_syntax.dart';
export 'src/block_syntaxes/list_syntax.dart';
export 'src/block_syntaxes/ordered_list_syntax.dart';
export 'src/block_syntaxes/ordered_list_with_checkbox_syntax.dart';
export 'src/block_syntaxes/paragraph_syntax.dart';
export 'src/block_syntaxes/setext_header_syntax.dart';
export 'src/block_syntaxes/setext_header_with_id_syntax.dart';
export 'src/block_syntaxes/table_syntax.dart';
export 'src/block_syntaxes/unordered_list_syntax.dart';
export 'src/block_syntaxes/unordered_list_with_checkbox_syntax.dart';
export 'src/document.dart';
export 'src/emojis.dart';
export 'src/extension_set.dart';
export 'src/html_renderer.dart';
export 'src/inline_parser.dart';
export 'src/inline_syntaxes/autolink_extension_syntax.dart';
export 'src/inline_syntaxes/autolink_syntax.dart';
export 'src/inline_syntaxes/code_syntax.dart';
export 'src/inline_syntaxes/color_swatch_syntax.dart';
export 'src/inline_syntaxes/decode_html_syntax.dart';
export 'src/inline_syntaxes/delimiter_syntax.dart';
export 'src/inline_syntaxes/email_autolink_syntax.dart';
export 'src/inline_syntaxes/emoji_syntax.dart';
export 'src/inline_syntaxes/emphasis_syntax.dart';
export 'src/inline_syntaxes/escape_html_syntax.dart';
export 'src/inline_syntaxes/escape_syntax.dart';
export 'src/inline_syntaxes/image_syntax.dart';
export 'src/inline_syntaxes/inline_html_syntax.dart';
export 'src/inline_syntaxes/inline_syntax.dart';
export 'src/inline_syntaxes/line_break_syntax.dart';
export 'src/inline_syntaxes/link_syntax.dart';
export 'src/inline_syntaxes/soft_line_break_syntax.dart';
export 'src/inline_syntaxes/strikethrough_syntax.dart';
export 'src/inline_syntaxes/text_syntax.dart';

const version = packageVersion;
