marked 0.2.5 copy "marked: ^0.2.5" to clipboard
marked: ^0.2.5 copied to clipboard

A simple Markdown parser for Dart. Create your own custom Markdown syntax.

Pub.dev package GitHub repository

Markdown #

A simple-setup Markdown syntax parser for Dart.
Create your own custom Markdown syntax.

Features #

  • Simple Markdown syntax setup
  • Generic Markdown-base for any use-case
  • Apply the Markdown to any text
  • Attach placeholders to modify the input

Getting started #

Install it using pub:

dart pub add marked
copied to clipboard

And import the package:

import 'package:marked/marked.dart';
copied to clipboard

Usage #

Create a Markdown instance with all the placeholders you want to use.

Then, use the apply method to parse the Markdown syntax.

import 'package:marked/marked.dart';

final markdown = Markdown.map({
  '**': (text, match) => '<b>$text</b>',
  '*': (text, match) => '<i>$text</i>',
  '__': (text, match) => '<u>$text</u>',
});

void main() {
  print(
    markdown.apply('''
      Hello **World**!
      __Looks *pretty* easy__
    ''')
  );

  // Output:
  //   Hello <b>World</b>!
  //   <u>Looks <i>pretty</i> easy</u>
}
copied to clipboard

Placeholders #

Placeholders are modular elements that can be used to create a Markdown syntax. They are used to replace a specific part of the text that matches a pattern.

MarkdownPlaceholder(RegExp(r'\*\*(.*?)\*\*'), (text, match) => '<b>$text</b>');
copied to clipboard

To make it easier to create placeholders, there are some predefined methods:

MarkdownPlaceholder.enclosed('**', (text, match) => '<b>$text</b>');
// Hello **World**! -> Hello <b>World</b>!

MarkdownPlaceholder.tag('strong', (text, match) => '<b>$text</b>');
// Hello <strong>World</strong>! -> Hello <b>World</b>!

MarkdownPlaceholder.regexp(r'\*\*(.*?)\*\*', (text, match) => '<b>$text</b>');
// Hello **World**! -> Hello <b>World</b>!
copied to clipboard

Placeholder Mapping #

To Simplify the markdown definition, you may transform a set of entries into placeholders, given the related string key. Using the Markdown.map() method.

Usage example, with the following placeholder equivalent:

'*': (text, match) => '<b>$text</b>'
  MarkdownPlaceholder.enclosed('*', (text, match) => '<b>$text</b>'),

'<custom>': (text, match) => '[$text]'
  MarkdownPlaceholder.tag('custom', (text, match) => '[$text]'),

'/\*([^*]+)\*/': (text, match) => '<b>$text</b>'
  MarkdownPlaceholder.regexp('/\*([^*]+)\*/', (text, match) => '<b>$text</b>'),
copied to clipboard

A prefix can be used to ensure the right placeholder is used.

'enclosed: *': (text, match) => '<b>$text</b>'
'tag: <custom>': (text, match) => '[$text]'
'regexp: \*([^*]+)\*': (text, match) => '<b>$text</b>'
copied to clipboard

Types of placeholders: #

Type Description Prefix Symbol
Normal Applies the default placeholder, which is enclosed. normal: None
Enclosed Starts and ends with the same token, like * for *text*. enclosed: None
Basic Single token placeholder, for a basic replacement. basic: None
Sticky Same as enclosed, but tokens must be next to a character. sticky: [...]
Split Splits the start token at | to set the end token, like /* | */ matching with /*text*/. split: ... | ...
RegExp Matches a regular expression, the text is the first capture group. regexp: /.../
Tag Starts with a tag of type <tag> and ending with </tag>, HTML-like.
Tags may have properties, key[="value"], defined as <tag prop1|...>, and can be fetched using match.tagProperties.
tag: <...>

Note: When using a unique character token, the created placeholders will be symmetrical with no nesting, this is so it's more intuitive.

Escaping #

To escape a placeholder, you can use the \ character. You may also escape the escape character, instances of \\ will be replaced with \, since they are escaped.

An input can be manually escaped and unescaped using the methods markdown.escape(input) and markdown.unescape(input).

Example #

import 'package:marked/marked.dart';

final htmlMarkdown = Markdown({
  MarkdownPlaceholder.enclosed('**', (text, match) => '<b>$text</b>'),
  MarkdownPlaceholder.enclosed('*', (text, match) => '<i>$text</i>'),
  MarkdownPlaceholder.enclosed('~~', (text, match) => '<strike>$text</strike>'),
  MarkdownPlaceholder.enclosed('`', (text, match) => '<code>$text</code>'),
});

void main() {
  print(htmlMarkdown.apply('HTML Markdown: **bold** *italic* ~~strike~~ `code`'));
  
  // [Output]
  //   HTML Markdown: <b>bold</b> <i>italic</i> <strike>strike</strike> <code>code</code>
}
copied to clipboard

More Examples:

5
likes
160
points
67
downloads

Publisher

verified publisherdrafakiller.com

Weekly Downloads

2024.08.07 - 2025.02.19

A simple Markdown parser for Dart. Create your own custom Markdown syntax.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

More

Packages that depend on marked