diff --git a/Cargo.lock b/Cargo.lock index 571f5199..71899a77 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -149,6 +149,7 @@ dependencies = [ "indoc", "insta", "itertools 0.10.5", + "katex", "miette 7.2.0", "notify", "num-bigint", @@ -570,7 +571,7 @@ dependencies = [ "anstream", "anstyle", "clap_lex", - "strsim", + "strsim 0.11.1", "terminal_size 0.4.0", "unicase", "unicode-width 0.2.0", @@ -654,6 +655,15 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc" +[[package]] +name = "copy_dir" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "543d1dd138ef086e2ff05e3a48cf9da045da2033d16f8538fd76b86cd49b2ca3" +dependencies = [ + "walkdir", +] + [[package]] name = "core-foundation" version = "0.9.4" @@ -796,6 +806,41 @@ version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "382ce8820a5bb815055d3553a610e8cb542b2d767bbacea99038afda96cd760d" +[[package]] +name = "darling" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim 0.10.0", + "syn 1.0.109", +] + +[[package]] +name = "darling_macro" +version = "0.14.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e" +dependencies = [ + "darling_core", + "quote", + "syn 1.0.109", +] + [[package]] name = "der" version = "0.7.9" @@ -815,6 +860,37 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive_builder" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d67778784b508018359cbc8696edb3db78160bab2c2a28ba7f56ef6932997f8" +dependencies = [ + "derive_builder_macro", +] + +[[package]] +name = "derive_builder_core" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c11bdc11a0c47bc7d37d582b5285da6849c96681023680b906673c5707af7b0f" +dependencies = [ + "darling", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "derive_builder_macro" +version = "0.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ebcda35c7a396850a55ffeac740804b40ffec779b98fffbb1738f4033f0ee79e" +dependencies = [ + "derive_builder_core", + "syn 1.0.109", +] + [[package]] name = "diff" version = "0.1.13" @@ -1496,6 +1572,12 @@ dependencies = [ "syn 2.0.87", ] +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + [[package]] name = "idna" version = "1.0.3" @@ -1693,6 +1775,19 @@ dependencies = [ "signature", ] +[[package]] +name = "katex" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4bdbc7a1823f188f56ac9486993536b70a2686a58d47095dcc10507a7d242bf5" +dependencies = [ + "cfg-if", + "derive_builder", + "itertools 0.10.5", + "quick-js", + "thiserror", +] + [[package]] name = "kqueue" version = "1.0.8" @@ -1743,6 +1838,16 @@ version = "0.2.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" +[[package]] +name = "libquickjs-sys" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f0b24e9bd171b75ae0295bd428fb8fe58410fb23156e5f34a4657a70c3cee96" +dependencies = [ + "cc", + "copy_dir", +] + [[package]] name = "libredox" version = "0.1.3" @@ -2518,6 +2623,16 @@ version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" +[[package]] +name = "quick-js" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19cb4cefcb00f4ab9b332664d06005a74f582ac16aa959c6ad5912957bd83e5f" +dependencies = [ + "libquickjs-sys", + "once_cell", +] + [[package]] name = "quote" version = "1.0.37" @@ -3039,6 +3154,12 @@ dependencies = [ "vte", ] +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + [[package]] name = "strsim" version = "0.11.1" diff --git a/crates/aiken-project/src/docs.rs b/crates/aiken-project/src/docs.rs index ec4cbf50..5d4adfec 100644 --- a/crates/aiken-project/src/docs.rs +++ b/crates/aiken-project/src/docs.rs @@ -271,8 +271,11 @@ fn generate_module( }; let rendered_content = convert_latex_markers( - module.render().expect("Module documentation template rendering"), - ); + module + .render() + .as_ref() + .expect("Module documentation template rendering"), + ); ( search_indexes, @@ -283,8 +286,7 @@ fn generate_module( ) } - -fn convert_latex_markers(input: String) -> String { +fn convert_latex_markers(input: &str) -> String { let re_inline = Regex::new(r#"\s*(.+?)\s*"#).unwrap(); let re_block = Regex::new(r#"\s*(.+?)\s*"#).unwrap(); @@ -300,16 +302,17 @@ fn convert_latex_markers(input: String) -> String { .build() .unwrap(); - let input = re_inline.replace_all(&input, |caps: ®ex::Captures| { + let input = re_inline.replace_all(input, |caps: ®ex::Captures| { let formula = &caps[1]; katex::render_with_opts(formula, &opts_inline).unwrap_or_else(|_| formula.to_string()) }); - re_block.replace_all(&input, |caps: ®ex::Captures| { - let formula = &caps[1]; - katex::render_with_opts(formula, &opts_block).unwrap_or_else(|_| formula.to_string()) - }) - .to_string() + re_block + .replace_all(&input, |caps: ®ex::Captures| { + let formula = &caps[1]; + katex::render_with_opts(formula, &opts_block).unwrap_or_else(|_| formula.to_string()) + }) + .to_string() } fn generate_static_assets(search_indexes: Vec) -> Vec { @@ -728,16 +731,39 @@ fn to_breadcrumbs(path: &str) -> String { } } -#[test] -fn to_breadcrumbs_test() { - // Pages - assert_eq!(to_breadcrumbs("a.html"), "."); - assert_eq!(to_breadcrumbs("/a.html"), "."); - assert_eq!(to_breadcrumbs("/a/b.html"), ".."); - assert_eq!(to_breadcrumbs("/a/b/c.html"), "../.."); +#[cfg(test)] +mod tests { + use super::*; - // Modules - assert_eq!(to_breadcrumbs("a"), "."); - assert_eq!(to_breadcrumbs("a/b"), ".."); - assert_eq!(to_breadcrumbs("a/b/c"), "../.."); + #[test] + fn to_breadcrumbs_test() { + // Pages + assert_eq!(to_breadcrumbs("a.html"), "."); + assert_eq!(to_breadcrumbs("/a.html"), "."); + assert_eq!(to_breadcrumbs("/a/b.html"), ".."); + assert_eq!(to_breadcrumbs("/a/b/c.html"), "../.."); + + // Modules + assert_eq!(to_breadcrumbs("a"), "."); + assert_eq!(to_breadcrumbs("a/b"), ".."); + assert_eq!(to_breadcrumbs("a/b/c"), "../.."); + } + + #[test] + fn convert_latex_markers_simple() { + assert_eq!( + convert_latex_markers(r#"\frac{4}{5}"#), + r#"45\frac{4}{5}"#, + ); + } + + #[test] + fn convert_latex_markers_sequence() { + assert_eq!( + convert_latex_markers( + r#"\frac{4}{5}e^{i \times \pi}"# + ), + r#"45\frac{4}{5}ei×πe^{i \times \pi}"#, + ); + } }