Skip to main content

microcad_docgen/md/
mod.rs

1// Copyright © 2026 The µcad authors <info@ucad.xyz>
2// SPDX-License-Identifier: AGPL-3.0-or-later
3
4//! Generate a single markdown file for symbol.
5
6mod markdown;
7mod section;
8mod to_md;
9
10pub use markdown::Markdown;
11pub use section::Section;
12pub use to_md::ToMd;
13
14use crate::DocGen;
15use microcad_builtin::Symbol;
16use microcad_lang::symbol::SymbolDef;
17
18/// Markdown generator that generates a markdown documentation file for each source file.
19pub struct Md {
20    pub output_path: Option<std::path::PathBuf>,
21}
22
23impl Md {
24    /// Return path
25    pub fn symbol_md_file_path(&self, symbol: &Symbol) -> std::path::PathBuf {
26        let mut path: std::path::PathBuf =
27            symbol.full_name().iter().map(|id| id.to_string()).collect();
28        path.set_extension("md");
29        self.output_path.clone().unwrap_or_default().join(path)
30    }
31
32    pub fn write_md_file(&self, symbol: &Symbol) -> std::io::Result<()> {
33        symbol.to_md().write(self.symbol_md_file_path(symbol))
34    }
35}
36
37impl DocGen for Md {
38    fn doc_gen(&self, symbol: &Symbol) -> std::io::Result<()> {
39        symbol
40            .riter()
41            .filter(|symbol| symbol.with_def(|def| matches!(def, SymbolDef::SourceFile(_))))
42            .try_for_each(|symbol| self.write_md_file(&symbol))
43    }
44}