terraphim-markdown-parser 1.16.34

Terraphim Markdown Parser
Documentation
extern crate pulldown_cmark;
use pulldown_cmark::{Options, Parser};
use std::collections::HashMap;

fn main() {
    let markdown_input = r#"
---
title: My Document
tags: [example, rust]
---

# Heading

This is a paragraph with a [[wikilink]].

Another paragraph with a [regular link](https://www.example.com).
"#;

    let mut options = Options::empty();
    options.insert(Options::ENABLE_STRIKETHROUGH);
    options.insert(Options::ENABLE_TASKLISTS);

    let mut frontmatter = HashMap::new();
    let parser = Parser::new_ext(markdown_input, options);

    for event in parser {
        if let pulldown_cmark::Event::Start(pulldown_cmark::Tag::Heading(level)) = event {
            if level == 1 {
                break;
            }
        } else if let pulldown_cmark::Event::Text(text) = event {
            if text.starts_with("---") {
                continue;
            }
            let mut parts = text.splitn(2, ':');
            if let (Some(key), Some(value)) = (parts.next(), parts.next()) {
                frontmatter.insert(key.trim().to_string(), value.trim().to_string());
            }
        }
    }

    println!("{:#?}", frontmatter);
}