blob: c9a4ea9beabd6d1a79dd96f0a82e08039d09ff91 [file] [log] [blame]
import 'block_parser.dart';
import 'inline_parser.dart';
/// ExtensionSets provide a simple grouping mechanism for common Markdown
/// flavors.
///
/// For example, the [gitHubFlavored] set of syntax extensions allows users to
/// output HTML from their Markdown in a similar fashion to GitHub's parsing.
class ExtensionSet {
/// The [ExtensionSet.none] extension set renders Markdown similar to
/// [Markdown.pl].
///
/// However, this set does not render _exactly_ the same as Markdown.pl;
/// rather it is more-or-less the CommonMark standard of Markdown, without
/// fenced code blocks, or inline HTML.
///
/// [Markdown.pl]: http://daringfireball.net/projects/markdown/syntax
static final ExtensionSet none = ExtensionSet([], []);
/// The [commonMark] extension set is close to compliance with [CommonMark].
///
/// [CommonMark]: http://commonmark.org/
static final ExtensionSet commonMark =
ExtensionSet([const FencedCodeBlockSyntax()], [InlineHtmlSyntax()]);
/// The [gitHubWeb] extension set renders Markdown similarly to GitHub.
///
/// This is different from the [gitHubFlavored] extension set in that GitHub
/// actually renders HTML different from straight [GitHub flavored Markdown].
///
/// (The only difference currently is that [gitHubWeb] renders headers with
/// linkable IDs.)
///
/// [GitHub flavored Markdown]: https://github.github.com/gfm/
static final ExtensionSet gitHubWeb = ExtensionSet([
const FencedCodeBlockSyntax(),
const HeaderWithIdSyntax(),
const SetextHeaderWithIdSyntax(),
const TableSyntax()
], [
InlineHtmlSyntax(),
StrikethroughSyntax(),
EmojiSyntax(),
AutolinkExtensionSyntax(),
]);
/// The [gitHubFlavored] extension set is close to compliance with the [GitHub
/// flavored Markdown spec].
///
/// [GitHub flavored Markdown]: https://github.github.com/gfm/
static final ExtensionSet gitHubFlavored = ExtensionSet([
const FencedCodeBlockSyntax(),
const TableSyntax()
], [
InlineHtmlSyntax(),
StrikethroughSyntax(),
AutolinkExtensionSyntax(),
]);
final List<BlockSyntax> blockSyntaxes;
final List<InlineSyntax> inlineSyntaxes;
ExtensionSet(this.blockSyntaxes, this.inlineSyntaxes);
}