blob: 29fac3161be96c4036156300ca10f0355d1f7dbc [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(
List<BlockSyntax>.unmodifiable(<BlockSyntax>[]),
List<InlineSyntax>.unmodifiable(<InlineSyntax>[]),
);
/// The [commonMark] extension set is close to compliance with [CommonMark].
///
/// [CommonMark]: http://commonmark.org/
static final ExtensionSet commonMark = ExtensionSet(
List<BlockSyntax>.unmodifiable(
<BlockSyntax>[const FencedCodeBlockSyntax()],
),
List<InlineSyntax>.unmodifiable(
<InlineSyntax>[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(
List<BlockSyntax>.unmodifiable(
<BlockSyntax>[
const FencedCodeBlockSyntax(),
const HeaderWithIdSyntax(),
const SetextHeaderWithIdSyntax(),
const TableSyntax(),
],
),
List<InlineSyntax>.unmodifiable(
<InlineSyntax>[
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(
List<BlockSyntax>.unmodifiable(
<BlockSyntax>[
const FencedCodeBlockSyntax(),
const TableSyntax(),
],
),
List<InlineSyntax>.unmodifiable(
<InlineSyntax>[
InlineHtmlSyntax(),
StrikethroughSyntax(),
AutolinkExtensionSyntax()
],
),
);
final List<BlockSyntax> blockSyntaxes;
final List<InlineSyntax> inlineSyntaxes;
ExtensionSet(this.blockSyntaxes, this.inlineSyntaxes);
}