parse method

LayoutAwareParseResult parse(
  1. String markdown
)

Parses Markdown content with layout metadata extraction.

Returns a LayoutAwareParseResult containing both the parsed data map and key-level metadata for preserving layout information.

markdown - The Markdown string to parse

Implementation

LayoutAwareParseResult parse(String markdown) {
  if (markdown.isEmpty) {
    return const LayoutAwareParseResult(data: {});
  }

  final lineEnding = _detectLineEnding(markdown);
  final lines = markdown.split(RegExp(r'\r?\n'));

  final data = <String, dynamic>{};
  final keyMeta = <String, dynamic>{};
  var currentIndex = 0;

  // Parse YAML frontmatter if present
  if (lines.isNotEmpty &&
      lines[0].trim() == _MarkdownPatterns.frontmatterDelimiter) {
    final frontmatterResult =
        _parseFrontmatter(lines, currentIndex, lineEnding);
    currentIndex = frontmatterResult.nextIndex;
    data.addAll(frontmatterResult.data);
    if (frontmatterResult.meta.isNotEmpty) {
      keyMeta.addAll(frontmatterResult.meta);
    }
  }

  // Track leading whitespace for the document
  final leadingNewlines = _countLeadingNewlines(lines, currentIndex);
  if (leadingNewlines > 0) {
    currentIndex += leadingNewlines;
  }

  // Parse body content
  final bodyResult = _parseBody(lines, currentIndex, lineEnding);
  if (bodyResult.data.isNotEmpty) {
    data.addAll(bodyResult.data);
  }
  if (bodyResult.meta.isNotEmpty) {
    keyMeta.addAll(bodyResult.meta);
  }

  // Add document-level whitespace metadata
  keyMeta['_document'] = KeyMetadata(
    whitespace: WhitespaceMeta(
      leadingNewlines: leadingNewlines,
      lineEnding: lineEnding,
    ),
  ).toJson();

  return LayoutAwareParseResult(
    data: data,
    keyMeta: keyMeta.isEmpty ? null : keyMeta,
  );
}