dart_markdown_parser 0.1.0
dart_markdown_parser: ^0.1.0 copied to clipboard
Pure Dart markdown parser with AST-based architecture. Supports CommonMark, GFM, LaTeX math, tables, footnotes, and extensible plugin system. No Flutter dependency.
example/dart_markdown_parser_example.dart
import 'package:dart_markdown_parser/dart_markdown_parser.dart';
void main() {
// Basic parsing example
print('=== Basic Parsing ===');
final parser = MarkdownParser();
final markdown = '''
# Hello World
This is a **bold** text and this is *italic*.
## Features
- Pure Dart parser
- No Flutter dependency
- AST-based architecture
- Extensible plugin system
### Code Example
```dart
void main() {
print('Hello from Dart!');
}
```
> This is a blockquote with **bold** text.
[Visit GitHub](https://github.com)
''';
final nodes = parser.parse(markdown);
print('Parsed ${nodes.length} top-level nodes:\n');
for (final node in nodes) {
print('${node.type}: ${node.toJson()}');
print('---');
}
// Plugin example
print('\n=== Using Plugins ===');
final registry = ParserPluginRegistry();
registry.register(const MentionPlugin());
registry.register(const HashtagPlugin());
registry.register(const EmojiPlugin());
final parserWithPlugins = MarkdownParser(plugins: registry);
final textWithPlugins = 'Hello @user! Check out #dart :smile:';
final pluginNodes = parserWithPlugins.parse(textWithPlugins);
print('Text: $textWithPlugins');
print('Parsed nodes:');
for (final node in pluginNodes) {
if (node is ParagraphNode) {
for (final child in node.children) {
print(' - ${child.type}: ${child.toJson()}');
}
}
}
// Table example
print('\n=== Table Parsing ===');
final tableMarkdown = '''
| Name | Age | City |
|------|-----|------|
| Alice | 30 | NYC |
| Bob | 25 | LA |
''';
final tableNodes = parser.parse(tableMarkdown);
for (final node in tableNodes) {
if (node is TableNode) {
print('Table with ${node.headers.length} columns and ${node.rows.length} rows');
print('Headers: ${node.headers.map((h) => h.map((n) => n.toJson())).toList()}');
}
}
// Math formula example
print('\n=== Math Formulas ===');
final mathMarkdown = r'''
Inline math: $x^2 + y^2 = z^2$
Block math:
$$
\sum_{i=1}^{n} x_i = x_1 + x_2 + ... + x_n
$$
''';
final mathNodes = parser.parse(mathMarkdown);
for (final node in mathNodes) {
print('${node.type}: ${node.toJson()}');
}
}