mdbook/crates/mdbook-core/src/utils/mod.rs
Eric Huss 09c3e542da Move take_lines functions to mdbook-driver and make private
These functions are only used by the links preprocessor. I'm moving
these functions to put them closer to the code that they are associated
with, and to reduce the public API surface.
2025-09-19 18:01:33 -07:00

37 lines
958 B
Rust

//! Various helpers and utilities.
use anyhow::Error;
use std::fmt::Write;
use tracing::error;
pub mod fs;
mod html;
mod toml_ext;
pub(crate) use self::toml_ext::TomlExt;
pub use self::html::{escape_html, escape_html_attribute};
/// Defines a `static` with a [`regex::Regex`].
#[macro_export]
macro_rules! static_regex {
($name:ident, $regex:literal) => {
static $name: std::sync::LazyLock<regex::Regex> =
std::sync::LazyLock::new(|| regex::Regex::new($regex).unwrap());
};
($name:ident, bytes, $regex:literal) => {
static $name: std::sync::LazyLock<regex::bytes::Regex> =
std::sync::LazyLock::new(|| regex::bytes::Regex::new($regex).unwrap());
};
}
/// Prints a "backtrace" of some `Error`.
pub fn log_backtrace(e: &Error) {
let mut message = format!("{e}");
for cause in e.chain().skip(1) {
write!(message, "\n\tCaused by: {cause}").unwrap();
}
error!("{message}");
}