parseFrontmatter function
Parse markdown content to extract frontmatter and body.
Implementation
ParsedMarkdown parseFrontmatter(String markdown, {String? sourcePath}) {
final match = frontmatterRegex.firstMatch(markdown);
if (match == null) {
return ParsedMarkdown(frontmatter: {}, content: markdown);
}
final frontmatterText = match.group(1) ?? '';
final content = markdown.substring(match.end);
FrontmatterData frontmatter = {};
try {
final parsed = _parseSimpleYaml(frontmatterText);
if (parsed is Map<String, dynamic>) {
frontmatter = parsed;
}
} catch (_) {
// YAML parsing failed - try again after quoting
try {
final quotedText = _quoteProblematicValues(frontmatterText);
final parsed = _parseSimpleYaml(quotedText);
if (parsed is Map<String, dynamic>) {
frontmatter = parsed;
}
} catch (retryError) {
final location = sourcePath != null ? ' in $sourcePath' : '';
stderr.writeln('Failed to parse YAML frontmatter$location: $retryError');
}
}
return ParsedMarkdown(frontmatter: frontmatter, content: content);
}