extractPlainText static method

String extractPlainText(
  1. String markdown
)

Extracts the plain text from the Markdown content

Implementation

static String extractPlainText(String markdown) {
  String plain = markdown;

  // Remove headers
  plain = plain.replaceAll(RegExp(r'^#+\s*', multiLine: true), '');

  plain = plain.replaceAll(RegExp(r'\*\*(.*?)\*\*'), r'\1');
  plain = plain.replaceAll(RegExp(r'\*(.*?)\*'), r'\1');
  plain = plain.replaceAll(RegExp(r'__(.*?)__'), r'\1');
  plain = plain.replaceAll(RegExp(r'_(.*?)_'), r'\1');

  // Remove inline code
  plain = plain.replaceAll(RegExp(r'`(.*?)`'), r'\1');

  // Remove links
  plain = plain.replaceAll(RegExp(r'\[([^\]]+)\]\([^)]+\)'), r'\1');

  // Remove images
  plain = plain.replaceAll(RegExp(r'!\[([^\]]*)\]\([^)]+\)'), r'\1');

  plain = plain.replaceAll(RegExp(r'```[\s\S]*?```'), '');

  // Remove blockquotes
  plain = plain.replaceAll(RegExp(r'^>\s*', multiLine: true), '');

  // Remove horizontal rules
  plain = plain.replaceAll(RegExp(r'^---+$', multiLine: true), '');

  // Remove lists
  plain = plain.replaceAll(RegExp(r'^[\s]*[-*+]\s*', multiLine: true), '');
  plain = plain.replaceAll(RegExp(r'^[\s]*\d+\.\s*', multiLine: true), '');

  // Collapse multiple spaces
  plain = plain.replaceAll(RegExp(r'\n\s*\n'), '\n\n');
  plain = plain.trim();

  return plain;
}