| 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); |
| } |