diff --git a/crates/aiken-project/Cargo.toml b/crates/aiken-project/Cargo.toml
index 8f4311e7..a71e391b 100644
--- a/crates/aiken-project/Cargo.toml
+++ b/crates/aiken-project/Cargo.toml
@@ -53,6 +53,7 @@ uplc = { path = '../uplc', version = "1.1.7" }
vec1 = "1.10.1"
walkdir.workspace = true
zip = "0.6.4"
+katex = "0.4"
[dev-dependencies]
blst = "0.3.11"
diff --git a/crates/aiken-project/src/docs.rs b/crates/aiken-project/src/docs.rs
index 979e8718..ec4cbf50 100644
--- a/crates/aiken-project/src/docs.rs
+++ b/crates/aiken-project/src/docs.rs
@@ -13,7 +13,9 @@ use aiken_lang::{
};
use askama::Template;
use itertools::Itertools;
+use katex::{Opts, OutputType};
use pulldown_cmark as markdown;
+use regex::Regex;
use serde::Serialize;
use serde_json as json;
use std::{
@@ -269,9 +271,7 @@ fn generate_module(
};
let rendered_content = convert_latex_markers(
- inject_math_library(
module.render().expect("Module documentation template rendering"),
- )
);
(
@@ -285,21 +285,31 @@ fn generate_module(
fn convert_latex_markers(input: String) -> String {
- input.replace("#[", "\\(")
- .replace("]#", "\\)")
-}
+ let re_inline = Regex::new(r#"\s*(.+?)\s*"#).unwrap();
+ let re_block = Regex::new(r#"\s*(.+?)\s*"#).unwrap();
-fn inject_math_library(html: String) -> String {
- let mathjax_script = r#"
-
-
- "#;
+ let opts_inline = Opts::builder()
+ .display_mode(false) // Inline math
+ .output_type(OutputType::Mathml)
+ .build()
+ .unwrap();
- html.replace("", &format!("{}\n", mathjax_script))
+ let opts_block = katex::Opts::builder()
+ .display_mode(true) // Block math
+ .output_type(OutputType::Mathml)
+ .build()
+ .unwrap();
+
+ 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()
}
fn generate_static_assets(search_indexes: Vec) -> Vec {