extractHeadings function

List<({int level, int lineNumber, String text})> extractHeadings(
  1. String markdown
)

Extract all headings from markdown text.

Implementation

List<({int level, String text, int lineNumber})> extractHeadings(
  String markdown,
) {
  final headings = <({int level, String text, int lineNumber})>[];
  final lines = markdown.split('\n');

  for (var i = 0; i < lines.length; i++) {
    final match = RegExp(r'^(#{1,6})\s+(.+)$').firstMatch(lines[i]);
    if (match != null) {
      headings.add((
        level: match.group(1)!.length,
        text: match.group(2)!.trim(),
        lineNumber: i + 1,
      ));
    }
  }

  return headings;
}