Fri, 28 Mar 2025 10:34:40 -0500
Added tag v0.1.0 for changeset 680e7ec7c7f8
46 | 1 | use std::env; |
2 | use regex::{Regex, Captures}; | |
3 | ||
4 | fn proc<A : AsRef<str>>(re : &str, str : A) -> String { | |
5 | let need_to_escape = Regex::new(r"([_*\\])").unwrap(); | |
6 | Regex::new(re).unwrap().replace_all(str.as_ref(), |caps : &Captures| { | |
7 | format!("{}{}{}", | |
8 | caps.get(1).unwrap().as_str(), | |
9 | need_to_escape.replace_all(caps.get(2).unwrap().as_str(), "\\$1"), | |
10 | caps.get(3).unwrap().as_str() | |
11 | ) | |
12 | }).to_string() | |
13 | } | |
14 | ||
15 | fn main() { | |
16 | let out_dir = env::var("OUT_DIR").unwrap(); | |
17 | ||
18 | // Since rust is stuck in 80's 7-bit gringo ASCII world, so that rustdoc does not support | |
19 | // markdown KaTeX mathematics, we have to process the README to include horrible horrible | |
20 | // horrible escapes for the math, and then use an vomit-inducingly ugly javasccript | |
21 | // workaround to process the math on the fly. | |
22 | ||
23 | println!("cargo:rerun-if-changed=README.md"); | |
24 | ||
25 | let readme = std::fs::read_to_string("README.md") | |
26 | .expect("Error reading README"); | |
27 | ||
28 | // Escape _, *, and \ in equations. | |
29 | let readme_uglified = proc(r"(?m)([^$]\$)([^$]+)(\$[^$])", | |
30 | proc(r"([^$]\$\$)([^$]+)(\$\$[^$])", readme)); | |
31 | // Remove the instructions for building the documentation | |
32 | let readme_cut = Regex::new("## Internals(.*|\n)*") | |
33 | .unwrap() | |
34 | .replace_all(&readme_uglified, ""); | |
35 | ||
36 | std::fs::write(out_dir + "/README_uglified.md", readme_cut.as_bytes()) | |
37 | .expect("Error saving uglified README"); | |
38 | } |