Skip to content

Latest commit

 

History

History

README.md

markdown_tools

Markdown helpers focused on custom inline syntaxes for the markdown package.

Installation

This package is not published to pub.dev. Use a git dependency.

dependencies:
  # ...
  markdown_tools:
    git:
      url: https://github.com/libsrcdev/dart-packages
      path: markdown_tools
      ref: main

Usage

import 'package:markdown_tools/markdown_tools.dart';

TexInlineSyntax

Parses TeX/LaTeX inline math delimited by a symbol (default $...$) and emits a math element.

final html = markdownToHtml(
  'Formula $x^2$ here.',
  inlineSyntaxes: [TexInlineSyntax()],
);
// <p>Formula <math>x^2</math> here.</p>

Custom delimiter:

final html = markdownToHtml(
  'Area ~a^2~ is valid.',
  inlineSyntaxes: [TexInlineSyntax(patternSymbol: '~')],
);

UsernameMentionSyntax

Parses username mentions like @username and converts them into links. Each provider enforces its own username rules (GitHub, Twitter, Instagram, TabNews).

final html = markdownToHtml(
  'Hello @octocat!',
  inlineSyntaxes: [UsernameMentionSyntax.github()],
);
// <p>Hello <a href="proxy.php?url=https%3A%2F%2Fgithub.com%2Foctocat">@octocat</a>!</p>

Built-in providers:

UsernameMentionSyntax.github();
UsernameMentionSyntax.twitter();
UsernameMentionSyntax.instagram();
UsernameMentionSyntax.tabnews();

Custom provider:

class ExampleMentionSyntax extends UsernameMentionSyntax {
  ExampleMentionSyntax({String prefix = '@'})
      : super(pattern: mentionPatternWithPrefix(prefix, r'([a-z0-9_]{1,32})'));

  @override
  Uri generateUri(String username) {
    return Uri(
      scheme: 'https',
      host: 'example.com',
      pathSegments: ['u', username],
    );
  }
}

final html = markdownToHtml(
  'Hi @someone',
  inlineSyntaxes: [ExampleMentionSyntax()],
);

Custom prefix:

UsernameMentionSyntax.github(prefix: '#');