mdBook/src/preprocess/mod.rs

64 lines
1.7 KiB
Rust
Raw Normal View History

//! Book preprocessing.
2018-12-04 07:11:41 +08:00
pub use self::cmd::CmdPreprocessor;
pub use self::index::IndexPreprocessor;
2018-07-24 01:45:01 +08:00
pub use self::links::LinkPreprocessor;
2018-12-04 07:11:41 +08:00
mod cmd;
mod index;
2018-07-24 01:45:01 +08:00
mod links;
use crate::book::Book;
use crate::config::Config;
use crate::errors::*;
2018-01-08 00:21:46 +08:00
use std::path::PathBuf;
/// Extra information for a `Preprocessor` to give them more context when
/// processing a book.
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct PreprocessorContext {
/// The location of the book directory on disk.
pub root: PathBuf,
/// The book configuration (`book.toml`).
pub config: Config,
/// The `Renderer` this preprocessor is being used with.
pub renderer: String,
/// The calling `mdbook` version.
pub mdbook_version: String,
#[serde(skip)]
__non_exhaustive: (),
}
impl PreprocessorContext {
/// Create a new `PreprocessorContext`.
pub(crate) fn new(root: PathBuf, config: Config, renderer: String) -> Self {
PreprocessorContext {
root,
config,
renderer,
mdbook_version: crate::MDBOOK_VERSION.to_string(),
__non_exhaustive: (),
}
}
}
/// An operation which is run immediately after loading a book into memory and
/// before it gets rendered.
2018-01-08 00:21:46 +08:00
pub trait Preprocessor {
/// Get the `Preprocessor`'s name.
fn name(&self) -> &str;
/// Run this `Preprocessor`, allowing it to update the book before it is
/// given to a renderer.
fn run(&self, ctx: &PreprocessorContext, book: Book) -> Result<Book>;
/// A hint to `MDBook` whether this preprocessor is compatible with a
/// particular renderer.
///
/// By default, always returns `true`.
fn supports_renderer(&self, _renderer: &str) -> bool {
true
}
}