diff --git a/doc-generator/src/generator/heading.rs b/doc-generator/src/generator/heading.rs
index 98b9626..81c62f1 100644
--- a/doc-generator/src/generator/heading.rs
+++ b/doc-generator/src/generator/heading.rs
@@ -1,9 +1,8 @@
-use std::fmt::format;
-
use markdown::mdast::Heading;
-use super::Printable;
+use crate::utils;
+use super::Printable;
impl Printable for Heading {
fn to_html(&self) -> String {
@@ -15,7 +14,25 @@ impl Printable for Heading {
let text: String = result.into_iter().collect();
- format!("{}", self.depth, text, self.depth)
+ if self.depth < 4 {
+ let html_fragment_text = utils::to_html_fragment(&self.get_text());
+
+ format!(
+ "{}",
+ self.depth, html_fragment_text, html_fragment_text, text, self.depth
+ )
+ } else {
+ format!("{}", self.depth, text, self.depth)
+ }
+ }
+
+ fn get_text(&self) -> String {
+ let mut result = Vec::::new();
+
+ for node in &self.children {
+ result.push(node.get_text())
+ }
+
+ result.join("-")
}
}
-
diff --git a/doc-generator/src/generator/mod.rs b/doc-generator/src/generator/mod.rs
index 56b61de..16f9c52 100644
--- a/doc-generator/src/generator/mod.rs
+++ b/doc-generator/src/generator/mod.rs
@@ -1,10 +1,12 @@
use markdown::mdast::Node;
-mod root;
mod heading;
+mod root;
+mod text;
pub trait Printable {
fn to_html(&self) -> String;
+ fn get_text(&self) -> String;
}
impl Printable for Node {
@@ -12,8 +14,17 @@ impl Printable for Node {
match self {
Node::Root(root) => root.to_html(),
Node::Heading(heading) => heading.to_html(),
+ Node::Text(text) => text.to_html(),
_ => format!("Not implemented
{:?}", self),
}
}
-}
+ fn get_text(&self) -> String {
+ match self {
+ Node::Root(root) => root.get_text(),
+ Node::Heading(heading) => heading.get_text(),
+ Node::Text(text) => text.get_text(),
+ _ => String::from(""),
+ }
+ }
+}
diff --git a/doc-generator/src/generator/root.rs b/doc-generator/src/generator/root.rs
index 7f10778..e378b2a 100644
--- a/doc-generator/src/generator/root.rs
+++ b/doc-generator/src/generator/root.rs
@@ -2,7 +2,6 @@ use markdown::mdast;
use super::Printable;
-
impl Printable for mdast::Root {
fn to_html(&self) -> String {
let mut result = Vec::::new();
@@ -13,4 +12,14 @@ impl Printable for mdast::Root {
result.into_iter().collect()
}
+
+ fn get_text(&self) -> String {
+ let mut result = Vec::::new();
+
+ for node in &self.children {
+ result.push(node.get_text())
+ }
+
+ result.join("-")
+ }
}
diff --git a/doc-generator/src/generator/text.rs b/doc-generator/src/generator/text.rs
new file mode 100644
index 0000000..424a499
--- /dev/null
+++ b/doc-generator/src/generator/text.rs
@@ -0,0 +1,13 @@
+use markdown::mdast::Text;
+
+use super::Printable;
+
+impl Printable for Text {
+ fn to_html(&self) -> String {
+ self.value.clone()
+ }
+
+ fn get_text(&self) -> String {
+ self.value.clone()
+ }
+}
diff --git a/doc-generator/src/main.rs b/doc-generator/src/main.rs
index 344f28d..f9b24f2 100644
--- a/doc-generator/src/main.rs
+++ b/doc-generator/src/main.rs
@@ -1,14 +1,11 @@
use clap::Parser;
use generator::Printable;
-use markdown::to_html;
use std::fs::File;
use std::io::Write;
-use std::{
- fs,
- path::Path,
-};
+use std::{fs, path::Path};
mod generator;
+mod utils;
#[derive(Parser, Debug)]
#[command(author, version, about, long_about = None)]
@@ -55,7 +52,11 @@ fn process_folder(path: &Path, input_folder: &Path, output_folder: &Path) {
}
}
-fn ensure_folder_exists(folder: &Path, input_folder: &Path, output_folder: &Path) -> Result<(), String> {
+fn ensure_folder_exists(
+ folder: &Path,
+ input_folder: &Path,
+ output_folder: &Path,
+) -> Result<(), String> {
// /home/fernando/misti/docs/markdown
let input_folder = input_folder.canonicalize().unwrap();
@@ -115,7 +116,6 @@ fn process_markdown(file: &Path, input_folder: &Path, output_folder: &Path) -> R
let md_ast = markdown::to_mdast(&markdown_text, &markdown::ParseOptions::gfm()).unwrap();
let html_text = md_ast.to_html();
-
// Read template.html
let mut template_path = output_folder.clone();
template_path.push("template.html");
diff --git a/doc-generator/src/utils.rs b/doc-generator/src/utils.rs
new file mode 100644
index 0000000..4897e2e
--- /dev/null
+++ b/doc-generator/src/utils.rs
@@ -0,0 +1,3 @@
+pub fn to_html_fragment(text: &String) -> String {
+ text.clone().to_lowercase().replace(" ", "-")
+}