diff --git a/pgml-dashboard/src/utils/markdown.rs b/pgml-dashboard/src/utils/markdown.rs index ad83651d3..0533b8b6c 100644 --- a/pgml-dashboard/src/utils/markdown.rs +++ b/pgml-dashboard/src/utils/markdown.rs @@ -3,7 +3,10 @@ use crate::{templates::docs::TocLink, utils::config}; use std::cell::RefCell; use std::collections::{HashMap, HashSet}; use std::path::{Path, PathBuf}; -use std::sync::Arc; +use std::sync::{ + atomic::{AtomicUsize, Ordering}, + Arc, +}; use aho_corasick::{AhoCorasick, AhoCorasickBuilder, MatchKind}; use anyhow::Result; @@ -13,7 +16,6 @@ use comrak::{ nodes::{Ast, AstNode, NodeValue}, parse_document, Arena, ComrakExtensionOptions, ComrakOptions, ComrakRenderOptions, }; -use convert_case::Casing; use itertools::Itertools; use lazy_static::lazy_static; use tantivy::collector::TopDocs; @@ -26,17 +28,23 @@ use url::Url; use crate::templates::docs::NavLink; use std::fmt; -pub struct MarkdownHeadings {} +pub struct MarkdownHeadings { + counter: Arc, +} impl MarkdownHeadings { pub fn new() -> Self { - Self {} + Self { + counter: Arc::new(AtomicUsize::new(0)), + } } } impl HeadingAdapter for MarkdownHeadings { fn enter(&self, meta: &HeadingMeta) -> String { - let id = meta.content.to_case(convert_case::Case::Kebab); + // let id = meta.content.to_case(convert_case::Case::Kebab); + let id = self.counter.fetch_add(1, Ordering::SeqCst); + let id = format!("header-{}", id); match meta.level { 1 => format!(r#"

"#), @@ -217,7 +225,9 @@ impl SyntaxHighlighterAdapter for SyntaxHighlighter { let code = match options.lang { "postgresql" | "sql" | "postgresql-line-nums" => { lazy_static! { - static ref SQL_KEYS: [&'static str; 66] = [ + static ref SQL_KEYS: [&'static str; 68] = [ + "PARTITION OF", + "PARTITION BY", "CASCADE", "INNER ", "ON ", @@ -285,7 +295,9 @@ impl SyntaxHighlighterAdapter for SyntaxHighlighter { "pgml.predict", "pgml.transform", ]; - static ref SQL_KEYS_REPLACEMENTS: [&'static str; 66] = [ + static ref SQL_KEYS_REPLACEMENTS: [&'static str; 68] = [ + r#"PARTITION OF"#, + r#"PARTITION BY"#, "CASCADE", "INNER ", "ON ",